一个Docker容器如何找到另一个Docker容器的IP地址?

时间:2020-06-03 03:19:14

标签: docker microservices

正在处理我的第一个MSA应用程序,并试图弄清楚Docker容器如何找到另一个Docker容器的IP地址?我的容器知道它需要连接到的另一个容器的名称,仅此而已。我不能使用“ --link”选项或docker-compose,因为组件可以在不同的时间使用,并且我需要一种编程方式来查找其他容器的IP地址并开始与它们的连接。

我必须认为这个问题已经很久以前已经解决了,但是我的GoogleFoo今天一定很弱,因为我什么都找不到!

感谢您的帮助! :)

AAR: 因此,问题在于在默认的“网桥”网桥网络上,Docker DNS不会跟踪容器名称...它将跟踪所有其他网络类型。

因此,下面可接受的解决方案是使用任何其他网络,并使容器使用该网络。

我创建了另一个网桥网络,以便仍然可以进行测试/开发工作,并且我的容器现在可以按名称查找彼此。为了进行生产,我将不得不将网络更改为类似“ macvlan”的类型。

如果您使用的是Kubernetes之类的产品,那么您将需要诸如Zookeeper或Consul之类的服务发现解决方案。

1 个答案:

答案 0 :(得分:2)

您必须在docker-compose中定义如下网络

networks:
  my-network:

然后将两个容器都放在同一网络中。

networks:
  - my-network

他们可以使用docker服务名称访问其他docker服务端口。

编辑2: 没有dokcer-compose,我可以传达2个容器,如下所示:

1)创建了netwrok-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)从设施容器内探查尤里卡

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
相关问题