V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ezez
V2EX  ›  Docker

[求教]在 docker 容器内部如何获取宿主机的 ip

  •  
  •   Ezez · 2020-06-20 09:42:13 +08:00 via iPhone · 6384 次点击
    这是一个创建于 1628 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求:开发一个插件给通过 docker 部署的服务集群用,插件的一个功能需要获取到宿主机的 ip
    已知:可通过 k8s 等管理 docker 的工具获取宿主机 ip
    问题:不通过 k8s 等管理工具有办法获取到宿主机的 ip 吗
    16 条回复    2020-06-28 18:17:02 +08:00
    csuzhangxc
        1
    csuzhangxc  
       2020-06-20 10:27:31 +08:00 via Android
    不通过环境变量传进去?
    ypcs03
        2
    ypcs03  
       2020-06-20 10:30:52 +08:00
    aws ec2 可以通过 IMDS, 其他的 cloud provider 应该也有类似的吧。通用的貌似不太容易,还跟容器的 config 有关比如--net=host.
    moonsn
        3
    moonsn  
       2020-06-20 10:34:02 +08:00 via Android
    I WANT TO CONNECT FROM A CONTAINER TO A SERVICE ON THE HOST
    The host has a changing IP address (or none if you have no network access). From 18.03 onwards our recommendation is to connect to the special DNS name host.docker.internal, which resolves to the internal IP address used by the host. This is for development purpose and will not work in a production environment outside of Docker Desktop for Mac.

    The gateway is also reachable as gateway.docker.internal.
    moonsn
        4
    moonsn  
       2020-06-20 10:35:02 +08:00 via Android
    macos 的话,如上。
    Latin
        5
    Latin  
       2020-06-20 10:37:22 +08:00
    挂宿主机 /proc 到容器 /host/proc,
    运行容器加 --privileged
    nsenter --net=/host/proc/1/ns/net ifconfig 网卡名
    cheng6563
        6
    cheng6563  
       2020-06-20 11:38:40 +08:00 via Android
    没办法,脚本里先获得 IP 再启动容器吧
    0312birdzhang
        7
    0312birdzhang  
       2020-06-20 12:26:59 +08:00 via iPhone
    1 楼加一,其他方法不推荐
    Ezez
        8
    Ezez  
    OP
       2020-06-20 14:48:15 +08:00 via iPhone
    @moonsn1994
    @Latin
    @0312birdzhang
    这三个方法我目前都查到了,但是现有条件都不支持,感觉这个功能完成不了了😭
    Jirajine
        9
    Jirajine  
       2020-06-20 14:50:27 +08:00 via Android
    Ezez
        10
    Ezez  
    OP
       2020-06-20 14:50:31 +08:00 via iPhone
    @cheng6563 部署这一块不是由我来做的
    Ezez
        11
    Ezez  
    OP
       2020-06-20 14:52:10 +08:00 via iPhone
    我的目的是要把这个插件能做成一个通用的插件,查了一圈,感觉不太可能,毕竟不同项目,配置或者是启动方式都不一样
    HTSdTt3WygdgQQGe
        12
    HTSdTt3WygdgQQGe  
       2020-06-20 15:47:32 +08:00 via Android
    curl ip.sb
    Smilencer
        13
    Smilencer  
       2020-06-20 15:58:09 +08:00
    我的做法是容器启动时,增加 host,自动将宿主机 docker 网关映射到 dockerhost
    ```
    docker run --add-host=dockerhost:`docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge`
    ```
    holosola
        14
    holosola  
       2020-06-20 16:16:58 +08:00 via Android
    试试用 host.docker.internal
    leschans
        15
    leschans  
       2020-06-20 19:42:39 +08:00 via iPhone   ❤️ 1
    curl -s ip.sb
    julyclyde
        16
    julyclyde  
       2020-06-28 18:17:02 +08:00
    需求有错

    跨机器的通信,命名服务也应该是外部的而不是上下级传递的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:28 · PVG 04:28 · LAX 12:28 · JFK 15:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.