如何通过IP使其他网络机器可以访问Docker容器?

时间:2016-02-29 15:06:24

标签: docker docker-networking

我需要创建一些必须由同一网络中的其他计算机访问的docker容器。

问题在于,当我创建容器时,Docker只能在主机内获得有效的IP地址。

我已经看过Docker文档(网络),但没有任何效果。

如果我在自己的计算机上运行ifconfig,我的IP地址为172.21.46.149。当我进入容器(Ubuntu)并运行ifconfig时,IP地址为172.17.0.2。我需要Docker来获取,例如172.21.46.150

我该怎么办?

3 个答案:

答案 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。

https://github.com/docker/dceu_tutorials/raw/master/images/tut6-step1.png

如果您的节点(同一网络中的其他计算机)通过对该键值存储的引用来运行其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命令讨论。