You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker容器内的Flask应用中执行宿主机Shell命令?

解决容器内Flask应用获取宿主机IP的问题

你的代码当前执行的是容器内部的ifconfig命令,因此返回的是容器自身的IP地址。要获取宿主机的IP,以下是几种实用的解决方法,按推荐程度排序:

方案1:启动容器时注入宿主机IP作为环境变量(推荐)

这是最安全、轻量的实现方式,无需修改容器网络配置或额外部署服务。

  1. 启动容器时,通过-e参数传递宿主机IP:

    # 用hostname -I获取宿主机主IP,也可替换为固定IP
    docker run -e HOST_IP=$(hostname -I | awk '{print $1}') 你的容器镜像名 ...
    
  2. 修改Flask代码,直接读取环境变量:

    import os
    from flask import jsonify
    
    @status.route("/ipaddr", methods=["GET"])
    @jwt_required()
    def get_external_ip():
        # 读取环境变量,设置默认值避免未传入的情况
        host_ip = os.getenv("HOST_IP", "unknown")
        return jsonify(ip_address=host_ip)
    

方案2:共享宿主机网络命名空间启动容器

让容器直接使用宿主机的网络栈,此时容器内执行ifconfig就能获取宿主机的网卡信息。但该方式会失去容器的网络隔离性,容器端口直接暴露在宿主机上,仅适合测试环境使用。

  1. 启动容器时添加--net=host参数:

    docker run --net=host 你的容器镜像名 ...
    
  2. 原有代码无需任何修改,直接运行即可返回宿主机IP。

方案3:宿主机部署本地服务提供IP查询

如果需要在容器内执行更多宿主机命令,可在宿主机上部署一个简单的HTTP服务,容器通过Docker网关访问该服务获取结果。

  1. 宿主机上创建返回IP的Python脚本(如host_ip_server.py):

    from flask import Flask
    import subprocess
    
    app = Flask(__name__)
    
    @app.route("/get_ip")
    def get_host_ip():
        result = subprocess.check_output("ifconfig | grep enp1s0 -A 1 | grep 192 | awk '{print $2}'", shell=True)
        return result.decode('utf-8').strip()
    
    if __name__ == "__main__":
        # 绑定0.0.0.0允许容器访问,可自定义端口
        app.run(host="0.0.0.0", port=8080)
    
  2. 在宿主机启动该服务:

    python3 host_ip_server.py &
    
  3. 修改容器内的Flask代码,通过Docker默认网关(通常为172.17.0.1)调用服务:

    import requests
    from flask import jsonify
    
    @status.route("/ipaddr", methods=["GET"])
    @jwt_required()
    def get_external_ip():
        try:
            # 替换为宿主机实际IP或Docker网关
            response = requests.get("http://172.17.0.1:8080/get_ip")
            response.raise_for_status()
            return jsonify(ip_address=response.text.strip())
        except requests.exceptions.RequestException as e:
            return jsonify(error=str(e)), 500
    

内容的提问来源于stack exchange,提问作者SSubedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:45:24