我需要创建一些必须由同一网络中的其他计算机访问的 docker 容器。
问题是当我创建容器时,Docker 获取的 IP 地址仅在主机内有效。
我已经查看了 Docker 文档(网络),但没有任何效果。
如果我ifconfig在我的机器上运行,我的 IP 地址是172.21.46.149. 当我进入容器(Ubuntu)并运行ifconfigIP 地址时172.17.0.2。例如,我需要 Docker 来获取172.21.46.150.
我该怎么做?
我需要创建一些必须由同一网络中的其他计算机访问的 docker 容器。
问题是当我创建容器时,Docker 获取的 IP 地址仅在主机内有效。
我已经查看了 Docker 文档(网络),但没有任何效果。
如果我ifconfig在我的机器上运行,我的 IP 地址是172.21.46.149. 当我进入容器(Ubuntu)并运行ifconfigIP 地址时172.17.0.2。例如,我需要 Docker 来获取172.21.46.150.
我该怎么做?
多主机访问涉及具有服务发现的覆盖网络。
见码头/网络:
覆盖网络需要键值存储。存储维护有关网络状态的信息,包括发现、网络、端点、IP 地址等。
Docker 引擎目前支持 Consul、etcd、ZooKeeper(分布式存储)和 BoltDB(本地存储)键值存储存储。
此示例使用 Consul。
如果您的节点(同一网络上的其他计算机)使用对该键值存储的引用运行其 docker 守护程序,则它们将能够与来自其他节点的容器进行通信。
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://<NODE-0-PRIVATE-IP>:8500/network --cluster-advertise=eth0:2375"
您只需要创建一个覆盖网络:
docker network create -d overlay --subnet=10.10.10.0/24 RED
(由于键值存储,它将在所有计算机上可用)
并在该网络上运行您的容器:
docker run -itd --name container1 --net RED busybox
您必须在主机上创建一个网桥并将该网桥分配给容器。这可能会对您有所帮助:https ://jpetazzo.github.io/2013/10/16/configure-docker-bridge-network/
当容器:端口通过主机:端口发布时,其他网络节点可以轻松访问 Docker 容器。
这是使用-pdocker-run 选项完成的。这是手册页的总结($man docker-run提供了更多详细信息和示例,我不会复制/粘贴):
-p, --publish=[]
Publish a container's port, or range of ports, to the host.
基本上:
docker run -it --rm -p 8085:8080 my_netcat nc -l -p 8080
将允许 LAN 节点连接到 docker-host-ip:8085 并与 netcat 命令讨论。