【问题标题】:Network connectivity for docker containers on Ubuntu VMUbuntu VM 上 docker 容器的网络连接
【发布时间】:2016-08-29 06:35:44
【问题描述】:

我已经在 Ubuntu 虚拟机上安装了 docker。运行 Ubuntu docker 容器。这些 docker 容器在172.17.*.* (eth0) 中获取的 IP 地址。使用此 IP,我将无法从外部 ping/访问 docker 容器。
因此,我试图为我的本地网络范围分配一个 IP。我按照以下步骤操作:

  • 使用您的子网和网关为您的 ip 块创建一个新的桥接网络

    $ docker network create --subnet 10.255.*.0/24 --gateway 10.255.*.254 ipstatic

  • 在该块中运行具有特定 ip 的 ubuntu 容器

    $ docker run --rm -it --net ipstatic --ip 10.255.*.2 phusion/ubuntu

  • 从任何其他地方卷曲 ip(假设这是一个公共 ip 块 duh)

    $ curl 10.255.*.2

curl: (7) 无法连接到 10.255.*.2 端口 80: 连接 拒绝

这样,即使是主机也无法访问10.255.*.*网络。docker容器取了IP 10.255.*.2,但仍然无法从外部访问。我是 Docker 的新手。我的目标是从我的本地网络访问 docker 容器。

【问题讨论】:

    标签: networking docker ip


    【解决方案1】:

    您可以在创建容器时指定network_mode: "host"。它将在与您的主机相同的 IP 上可用。但是,您必须确保它不会尝试侦听已在使用的端口。

    例如:

    version: "2"
    services:
      myapp1:
        network_mode: "host"
        etc
    

    但是,将主机视为堡垒并限制外部世界可直接访问的容器是一种很好的做法。例如,仅将 nginx 保留在公共面孔上,并将所有其他容器保留在私有内部网络中。我刚刚写了另一个关于这个的答案few minutes ago

    【讨论】:

    • 感谢您提供的信息。如果使用 --net=host,则 docker 容器将具有与主机相同的 IP/网络配置。我正在寻找从同一主机启动多个容器(不同 IP)并从外部访问它们。
    • 那么--net=host 不是你想要的。只需在默认内部桥接网络上的主机内运行您的容器,并使用端口转发使它们对外界可见。例如docker run --name myapp -p 8080:80 nginx。在地址 http://:8080 打开浏览器,会出现 nginx 的默认页面。
    【解决方案2】:

    感谢您的建议。 按照https://eatpeppershothot.blogspot.in/2015/12/using-pipework-to-enable-communication.html中提到的方法 我能够从容器与网络上的其他设备进行通信。 请注意,这仅适用于独立 Linux PC,不适用于 VM 映像。

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多