如何为 docker compose 使用主机网络?

新手上路,请多包涵

我想将 docker compose 与主机网络一起使用。

我有一个访问本地 REST api 的 docker 容器。通常我跑

docker run --net=host -p 18080:8080 -t -i containera

它可以访问在 http://127.0.0.1:8080 上运行的主机 REST api。由于我想缩放容器 containera 我发现 docker compose 来缩放容器。但是文档中的 docker compose 文件 不起作用。 docker 容器不查询 REST API。

我尝试了以下撰写文件,但属性

version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G
      restart_policy:
        condition: on-failure
    ports:
      - "18080:8080"

但属性 network_mode 被忽略/不允许。与消息

Ignoring unsupported options: network_mode

原文由 A.Dumas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

docker-compose v3 的等效配置使用 network_mode 键: https ://docs.docker.com/compose/compose-file/compose-file-v3/#network_mode

您应该在 network_mode 中将 --- 设置为 "host" docker-compose.yml

如果使用 docker swarm,请参阅 codestation 的答案

原文由 ford 发布,翻译遵循 CC BY-SA 4.0 许可协议

您正在混合在 compose 和 swarm 部署中无效的选项。

如果您使用 docker-compose up 进行部署,那么您的 compose 文件应该是这样的:

 version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"
    restart: on-failure

Te 选项 deploy 在撰写模式下被忽略,而端口选项在使用主机模式网络时被忽略。我建议不要使用主机模式网络并在另一个容器中使用反向代理来平衡您的扩展容器。


(当您澄清您没有使用群部署时,请随意忽略这部分答案)。

如果你使用 swarm 部署,那么你的 compose 文件应该是这样的:

 version: "3.4"
services:
  web:
    image: conatinera:latest
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G
      restart_policy:
        condition: on-failure
    networks:
      - host

networks:
  host:
    name: host
    external: true

同样,发布的端口和主机模式网络不混合。也可能是您的扩展将失败,因为所有容器都将尝试绑定到同一个端口。我建议不要使用主机模式网络,让 docker 对您的副本进行负载平衡。

原文由 codestation 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进