正在处理我的第一个MSA应用程序,并试图弄清楚Docker容器如何找到另一个Docker容器的IP地址?我的容器知道它需要连接到的另一个容器的名称,仅此而已。我不能使用“ --link”选项或docker-compose,因为组件可以在不同的时间使用,并且我需要一种编程方式来查找其他容器的IP地址并开始与它们的连接。>
我必须认为这个问题已经很久以前已经解决了,但是我的GoogleFoo今天一定很弱,因为我什么都找不到!
感谢您的帮助! :)
AAR: 因此,问题在于在默认的“网桥”网桥网络上,Docker DNS不会跟踪容器名称...它将跟踪所有其他网络类型。
因此,下面可接受的解决方案是使用任何其他网络,并使容器使用该网络。
我创建了另一个网桥网络,以便仍然可以进行测试/开发工作,并且我的容器现在可以按名称查找彼此。为了进行生产,我将不得不将网络更改为类似“ macvlan”的类型。
如果您使用的是Kubernetes之类的产品,那么您将需要诸如Zookeeper或Consul之类的服务发现解决方案。
答案 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