7

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

问题是当我创建容器时,Docker 获取的 IP 地址仅在主机内有效。

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

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

我该怎么做?

4

3 回答 3

2

多主机访问涉及具有服务发现的覆盖网络。 见码头/网络

覆盖网络需要键值存储。存储维护有关网络状态的信息,包括发现、网络、端点、IP 地址等。
Docker 引擎目前支持 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
于 2016-03-01T07:12:19.377 回答
2

您必须在主机上创建一个网桥并将该网桥分配给容器。这可能会对您有所帮助:https ://jpetazzo.github.io/2013/10/16/configure-docker-bridge-network/

于 2016-02-29T15:18:34.350 回答
1

当容器:端口通过主机:端口发布时,其他网络节点可以轻松访问 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 命令讨论。

于 2016-02-29T15:39:30.830 回答