我需要创建一些必须由同一网络中的其他计算机访问的 docker 容器。
问题是当我创建容器时,Docker 获取的 IP 地址仅在主机内有效。
我已经查看了 Docker 文档(网络),但没有任何效果。
如果我ifconfig
在我的机器上运行,我的 IP 地址是172.21.46.149
. 当我进入容器(Ubuntu)并运行ifconfig
IP 地址时172.17.0.2
。例如,我需要 Docker 来获取172.21.46.150
.
我该怎么做?
我需要创建一些必须由同一网络中的其他计算机访问的 docker 容器。
问题是当我创建容器时,Docker 获取的 IP 地址仅在主机内有效。
我已经查看了 Docker 文档(网络),但没有任何效果。
如果我ifconfig
在我的机器上运行,我的 IP 地址是172.21.46.149
. 当我进入容器(Ubuntu)并运行ifconfig
IP 地址时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 容器。
这是使用-p
docker-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 命令讨论。