我已经阅读了几个小时的码头码头,因为我是新手,并且我试图创建单独的网络,并且容器之间相互通信。
(这是要求所以请不建议单一网络解决方案)
这是我的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
能够通过server1
或client
网络与server1
进行通信。
当我尝试发送看起来基本上像这样的请求时:
http://client:4001/api/requestnode
或者这个:
http://server1:4001/api/requestnode
从client
到server1
我得到了:
错误:连接ECONNREFUSED 172.19.0.5:4001
哪会表明服务没有看到对方?
当我使用单个网络运行测试时,一切都很好。
我做错了什么?
非常感谢!
谢谢!
---编辑---
docker run -it --rm --net container:id nicolaka/netshoot netstat -lnt
client
& server1
无条件地
也是我本地机器的屏幕截图:
client
:
server1
:
matewilk@matewilk:~$ 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
matewilk@matewilk:~$ 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: eth1@if270: <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: eth0@if272: <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
答案 0 :(得分:1)
对于容器到容器的通信,没有必要发布目标端口,您将直接与目标容器通信。目标容器中的应用程序需要侦听所有接口(0.0.0.0,而不是127.0.0.1)。假设是这种情况,您应该可以连接:
http://server1:4000/api/requestnode
服务器启动后。请注意,客户端可以在服务器之前启动,因此您需要实现某种形式的重试或wait-for-it类似脚本以确保服务器首先启动。