【问题标题】:docker-compose network_mode: "host" doesn't seem to workdocker-compose network_mode:“主机”似乎不起作用
【发布时间】:2016-07-29 16:50:16
【问题描述】:

我尝试使用 docker-compose.yml 文件构建容器:

version: '2'

services:
     geonode:
        build: 
            context: .
        hostname: geonode
        container_name: geonode
        ports:
            - 8000:8000
        volumes:
            - .:/geonode/
        entrypoint:
            - /usr/bin/python
        command: manage.py runserver 0.0.0.0:8000
        network_mode: host

在我的 Dockerfile 中,我在 FROM ubuntu:14.04 之后运行 apt-get update,但它失败了:Could not resolve 'archive.ubuntu.com'

我尝试了docker run -i -t --net=host ubuntu:14.04 /bin/bash,然后运行apt-get update,它可以工作。 所以在我看来,docker-compose 中的 network_mode 和带有 docker run 的 --net=host 工作方式不同。

有人解释一下吗?

【问题讨论】:

  • 您找到解决方案了吗?我对 npm 有类似的问题

标签: docker docker-compose


【解决方案1】:

这样做时至少在 3.7 版中有效:

services:
    my-app:
        container_name: my-app
        build: 
            context: .
            network: host
        network_mode: host
        command: /app/my-app

这些端口已经过时,因为所有端口都“暴露”了。

【讨论】:

  • 谢谢!在此之前,我必须大约每周重新安装一次 Linux,以解决构建镜像时 Docker 无法连接到互联网的问题。
【解决方案2】:

自从发布此答案以来,docker build --network 现在是一个选项。所以你可以运行:

docker build --network host -t charmosz/geonode .

从 compose 文件 2.2 开始,这是 compose 中的一个选项:

version: '2.2'

services:
  geonode:
    image: charmosz/geonode
    build:
      context: .
      network: host
    ...

您可能会看到与桥接网络的网络冲突。在这种情况下,设置“bip”可以通过在 daemon.json 文件中设置以下内容来更改 docker 用于名为 bridge 的默认桥接网络的子网:

{ "bip": "172.16.100.1/24" }

您需要重新启动 docker 才能应用该更改。我有presented on this recently(注意前面的幻灯片显示了在 Mac 和 Windows 中配置 daemon.json 选项的位置)。

【讨论】:

  • 选项--net 似乎不再存在
  • 至少在我本地的 1.26.2 中似乎不可用
  • 如何修复桥接网络?当我的容器停止连接到互联网时,我必须每周重新安装 Linux。现在我学会了按照@nice_pink 的回答只使用“主机”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 2022-08-17
  • 2019-09-03
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多