在Docker多主机networking中访问泊坞窗容器

我使用Docker Overlaynetworking创build了一个Docker多主机networking,其中有4个节点:node0,node1,node2和node3。 Node0充当共享节点信息的键值存储,而node1,node2和node3绑定到键值存储。

在这里输入图像说明

这里是node1networking:

user@node1$ docker network ls NETWORK ID NAME DRIVER 04adb1ab4833 RED overlay [ . . ] 

至于node2networking:

 user@node2$ docker network ls NETWORK ID NAME DRIVER 04adb1ab4833 RED overlay [ . . ] 

container1在节点1上运行,该节点承载着REDnetworking。

 user@node1$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f9bacac3c01d ubuntu "/bin/bash" 3 hours ago Up 2 hours container1 

Docker为属于RED覆盖networking的每个容器添加了一个入口/ etc / hosts。

 user@node1$ docker exec container1 cat /etc/hosts 10.10.10.2 d82c36bc2659 127.0.0.1 localhost [ . . ] 10.10.10.3 container2 10.10.10.3 container2.RED 

从node2,我试图访问在node1上运行的container1。 我试图使用下面的命令运行container1,但它返回错误。

 `user@node2$ docker docker exec -i -t container1 bash` Error response from daemon: no such id: container1 

任何build议?

谢谢。

networking仅为容器共享。

虽然networking在跨多主机覆盖的容器之间共享,但是docker守护进程不能按原样在它们之间进行通信。

user@_node2_$ docker exec -i -t container1 bash不起作用,因为确实no such id: container1正在从node2运行。

访问远程Docker守护进程

Docker守护进程通过套接字进行通信。 UNIX套接字是默认的,但是可以添加一个选项--host来指定守护进程应该绑定的其他套接字。

请参阅docker daemon手册页:

  -H, --host=[unix:///var/run/docker.sock]: tcp://[host:port] to bind or unix://[/path/to/socket] to use. The socket(s) to bind to in daemon mode specified using one or more tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd. 

因此,可以从任何节点访问docker守护进程绑定到tcp套接字。

命令user@node2$ docker -H tcp://node1:port exec -i -t container1 bash会工作正常。

Docker和Docker集群( Swarm )

我不知道你想要部署什么,也许只是玩弄教程,这太棒了! 您可能有兴趣研究部署Docker集群的Swarm 。 简而言之:您可以使用多个节点,因为它们是通过具有整个Docker API的单个节点访问一个强大的Docker守护程序的。