一个 Docker 容器如何找到另一个 Docker 容器的 IP 地址?
How can one Docker Container find the IP address of another Docker Container?
正在处理我的第一个 MSA 应用程序,并试图弄清楚 Docker 容器如何找到另一个 Docker 容器的 IP 地址?我的容器知道它需要连接的另一个容器的名称,仅此而已。我不能使用“--link”选项或 docker-compose,因为组件可能会在不同时间出现,我需要一种编程方式来查找其他容器的 IP 地址并开始与他们建立联系。
我想这个问题早就解决了,但我的GoogleFoo今天一定很弱,因为我找不到任何东西!
感谢您的帮助! :)
AAR:
所以问题是在默认的 'bridge' 桥接网络上,Docker DNS 不会跟踪容器名称......它会跟踪所有其他网络类型。
因此下面可接受的解决方案是使用任何其他网络并让容器使用该网络。
我创建了另一个桥接网络,这样我仍然可以做 testing/dev 工作,我的容器现在可以通过名称找到彼此。对于生产,我必须将网络更改为 'macvlan' 类型。
如果您使用的是 Kubernetes 之类的东西,那么您将需要服务发现解决方案,例如 Zookeeper 或 Consul。
您必须在 docker-compose 中定义网络,如下所示
networks:
my-network:
然后让两个容器成为同一个网络的一部分。
networks:
- my-network
并且他们可以使用 docker 服务名称访问其他 docker 服务端口。
编辑 2:
如果没有 dokcer-compose,我可以如下通信 2 个容器:
1) 创建网络 - my-netwrok
docker network create -d bridge my-network
2) 在同一网络下启动了 2 个服务
docker run -d --name eureka --network=my-network eureka-service:1.0
docker run -d --name facility --network=my-network facility-service:1.0
3) 登录到设施容器
docker exec -it facility bash
4) 从设施容器内部 ping 尤里卡
bash-4.4# ping eureka
PING eureka (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.149 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.078 ms
正在处理我的第一个 MSA 应用程序,并试图弄清楚 Docker 容器如何找到另一个 Docker 容器的 IP 地址?我的容器知道它需要连接的另一个容器的名称,仅此而已。我不能使用“--link”选项或 docker-compose,因为组件可能会在不同时间出现,我需要一种编程方式来查找其他容器的 IP 地址并开始与他们建立联系。
我想这个问题早就解决了,但我的GoogleFoo今天一定很弱,因为我找不到任何东西!
感谢您的帮助! :)
AAR: 所以问题是在默认的 'bridge' 桥接网络上,Docker DNS 不会跟踪容器名称......它会跟踪所有其他网络类型。
因此下面可接受的解决方案是使用任何其他网络并让容器使用该网络。
我创建了另一个桥接网络,这样我仍然可以做 testing/dev 工作,我的容器现在可以通过名称找到彼此。对于生产,我必须将网络更改为 'macvlan' 类型。
如果您使用的是 Kubernetes 之类的东西,那么您将需要服务发现解决方案,例如 Zookeeper 或 Consul。
您必须在 docker-compose 中定义网络,如下所示
networks:
my-network:
然后让两个容器成为同一个网络的一部分。
networks:
- my-network
并且他们可以使用 docker 服务名称访问其他 docker 服务端口。
编辑 2: 如果没有 dokcer-compose,我可以如下通信 2 个容器:
1) 创建网络 - my-netwrok
docker network create -d bridge my-network
2) 在同一网络下启动了 2 个服务
docker run -d --name eureka --network=my-network eureka-service:1.0
docker run -d --name facility --network=my-network facility-service:1.0
3) 登录到设施容器
docker exec -it facility bash
4) 从设施容器内部 ping 尤里卡
bash-4.4# ping eureka
PING eureka (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.149 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.078 ms