Docker多容器多网络设置

时间:2017-09-04 20:34:16

标签: node.js docker networking docker-compose

我已经阅读了几个小时的码头码头,因为我是新手,并且我试图创建单独的网络,并且容器之间相互通信。

(这是要求所以请不建议单一网络解决方案

这是我的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能够通过server1client网络与server1进行通信。

当我尝试发送看起来基本上像这样的请求时:

http://client:4001/api/requestnode

或者这个:

http://server1:4001/api/requestnode

clientserver1

我得到了:

  

错误:连接ECONNREFUSED 172.19.0.5:4001

哪会表明服务没有看到对方?

当我使用单个网络运行测试时,一切都很好。

我做错了什么?

非常感谢!

谢谢!

---编辑--- docker run -it --rm --net container:id nicolaka/netshoot netstat -lnt

client& server1无条件地

enter image description here

也是我本地机器的屏幕截图:

client

enter image description here

server1

enter image description here

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

1 个答案:

答案 0 :(得分:1)

对于容器到容器的通信,没有必要发布目标端口,您将直接与目标容器通信。目标容器中的应用程序需要侦听所有接口(0.0.0.0,而不是127.0.0.1)。假设是这种情况,您应该可以连接:

http://server1:4000/api/requestnode
服务器启动后

。请注意,客户端可以在服务器之前启动,因此您需要实现某种形式的重试或wait-for-it类似脚本以确保服务器首先启动。