在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守护程序的。