【问题标题】:How to make Docker container accessible to other network machines through IP?如何让其他网络机器通过IP访问Docker容器?
【发布时间】:2016-06-12 16:30:14
【问题描述】:

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

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

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

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

我该怎么做?

【问题讨论】:

  • 如果你的容器直接绑定主机端口可以通信吗?

标签: docker docker-networking


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    通过 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 命令讨论。

    【讨论】:

    • 这个解决方案的问题是,当我发展我的环境时,事情会变得有点混乱,我想只要我有很多很多容器......
    • 嗯...您可能需要编辑您的问题以使其更清晰。您真的需要与主机 LAN 在同一个 LAN 上的所有容器吗?我理解多容器的原因,但我怀疑主机将运行超过 65k 的容器(导致缺少要绑定的套接字)。请记住,Docker 最佳实践是"Caas",根据 CaaS,容器(应该运行单个服务)应该只需要一个端口,在特殊的多端口服务情况下需要两个或三个。
    【解决方案3】:

    多主机访问涉及具有服务发现的覆盖网络。
    见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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多