【问题标题】:How to access a running docker containers external ip from within the container?如何从容器内访问正在运行的 docker 容器外部 ip?
【发布时间】:2017-02-22 23:28:05
【问题描述】:

当我通过docker-compose 部署时,我可以对任何容器运行检查并查看外部 ip。

$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' parentserver
>>>172.17.0.3

我的问题是,如果有人要在他们的本地机器上运行git clone 我的存储库并运行docker-compose,是否可以保证parentserver 的IP 在他们的机器上也是172.17.0.3?

我问的原因是我有通过 HTTP 相互通信的微服务,并且我目前在我的应用逻辑中硬编码了 IP。

如果每个 docker 容器的 IP 保证相同,无论它在哪里运行,这都不是问题,无论哪种方式,我都需要找到更好的解决方案,这就是为什么我想知道是否可以查询从容器内运行 docker 容器的外部 IP?

【问题讨论】:

    标签: networking docker docker-compose


    【解决方案1】:

    通过docker-compose 创建的 Docker 容器默认放置在共享网络中,并连接到嵌入式 DNS 服务器。这意味着它们默认为linked。链接到容器“B”的容器“A”可以通过为其分配的链接名称(默认情况下为容器名称)ping 容器“B”。

    以我的 nginx 配置为例:

    version: '2'
    
    services:
      # ... more config
    
      nginx:
        environment:
          API_DOMAIN:     api.mysite.com
          FRONT_DOMAIN:   'mysite.com www.mysite.com'
          ERRBIT_DOMAIN:  errbit.mysite.com
          ERRBIT_HOST:    http://errbit:8080
          PGADMIN_DOMAIN: pgadmin.mysite.com
          PGADMIN_HOST:   http://pgadmin:5050
    
      errbit:
        env_file: ./production/errbit.env
    

    我制作了一个通过环境变量接受域的 nginx 映像,主机是在使用此配置创建的同一 docker 主机中运行的其他容器的名称。

    https://docs.docker.com/engine/userguide/networking/

    【讨论】:

    • 很酷,所以我可以将所有硬编码的 http 请求替换为 172.17.0.3 为该服务的实际容器名称?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    相关资源
    最近更新 更多