我需要创建一些必须由同一网络中的其他计算机访问的docker容器。
问题在于,当我创建容器时,Docker只能在主机内获得有效的IP地址。
我已经看过Docker文档(网络),但没有任何效果。
如果我在自己的计算机上运行ifconfig
,我的IP地址为172.21.46.149
。当我进入容器(Ubuntu)并运行ifconfig
时,IP地址为172.17.0.2
。我需要Docker来获取,例如172.21.46.150
。
我该怎么办?
答案 0 :(得分:2)
您必须在主机上创建一个网桥,并将该网桥分配给容器。这可能会对您有所帮助:https://jpetazzo.github.io/2013/10/16/configure-docker-bridge-network/
答案 1 :(得分:2)
多主机访问涉及覆盖网络,服务发现。
见docker/networking:
覆盖网络需要键值存储。商店维护有关网络状态的信息,包括发现,网络,端点,IP地址等 Docker Engine目前支持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
答案 2 :(得分:1)
当通过host:port发布container:port时,其他网络节点可以轻松访问Docker容器。
这是使用-p
docker-run选项完成的。以下是手册页的总结($man docker-run
提供了更多详细信息以及我不会复制/粘贴的示例):
-p, --publish=[]
Publish a container's port, or range of ports, to the host.
请参阅doc online。这篇question/answer也很有趣。
基本上:
docker run -it --rm -p 8085:8080 my_netcat nc -l -p 8080
允许LAN节点连接到docker-host-ip:8085并与netcat命令讨论。