我已经读了几个小时的码头坞站,因为我对它很陌生,我试图创建具有相互通信容器的单独网络。码头多容器多网络设置
(这是必要条件,所以请不建议燎网络解决方案)
这是我docker-compose.yml
文件:
version: '2'
services:
client:
container_name: client
build: ./rest_client
ports:
- "5858:5858"
- "3000:3000"
networks:
- client
- server1
server1:
container_name: server1
build: ./server_instance
ports:
- "5841:5840"
- "4001:4000"
networks:
- client
- server1
node1:
container_name: node1
build: ./node_instance
ports:
- "5851:5850"
- "5001:5000"
networks:
- server1
networks:
client:
driver: bridge
server1:
driver: bridge
为了简单起见,我摆脱了大多数服务器和节点来澄清问题。
经过上述设置,我假设client
能够通过client
或网络与进行通信。
当我尝试发送它基本上是这样的请求:
http://client:4001/api/requestnode
或本:
http://server1:4001/api/requestnode
从client
到
我越来越:
Error: connect ECONNREFUSED 172.19.0.5:4001
这将暗示服务不会彼此看到?
当我在单个网络上运行测试时一切正常。
我在做什么错?
帮助非常感谢!
谢谢!
---编辑--- docker run -it --rm --net container:id nicolaka/netshoot netstat -lnt
client
& accordintly
而且从我的本地机器的屏幕截图:
client
:
:
[email protected]:~$ docker run -it --rm --net container:658d89ba410f nicolaka/netshoot nslookup server1
nslookup: can't resolve '(null)': Name does not resolve
Name: server1
Address 1: 172.19.0.4 server1.multisite_server1
[email protected]:~$ docker run -it --rm --net container:f032cfa52c60 nicolaka/netshoot ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
269: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.2/16 scope global eth1
valid_lft forever preferred_lft forever
271: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:13:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.19.0.4/16 scope global eth0
valid_lft forever preferred_lft forever
时间不是问题,我可以轻松地从我的本地机器调用所有服务。另外,我需要映射端口,因为我有同一个容器的多个实例,并且要求它们是独立的服务器,所以我为每个实例设置了不同的端口,因此映射。另外,我不确定你为什么提到'127.0.0.1'?这在我的问题中根本没有提到。所以问题依然存在,容器之间没有沟通,没有明显的原因。 – matewilk
对于docker来说,收听环回是一个常见的错误。请注意,在我上面的回答中,您需要连接到端口4000,而不是端口4001,容器不会在主机上看到您发布的端口,而只能看到目标容器内的实际端口。 – BMitch
同样的问题恐怕'错误:连接ECONNREFUSED 172.18.0.2:4000' – matewilk