48

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

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

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

它可以访问在http://127.0.0.1:8080. 因为我想缩放容器,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
4

6 回答 6

40

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 的答案

于 2019-06-13T14:17:54.203 回答
18

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

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

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

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


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

如果你使用 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 对您的副本进行负载平衡。

于 2019-06-13T18:24:54.317 回答
4

我面临着同样的问题。我发现当network_mode设置为时host,端口映射不起作用,因为容器会寻找主机的端口。因此,删除端口映射对我有用,如下所示。

services:
  web-abc:
    build: ./abc
    # ports:
    #   - "7000:7000"
    volumes:
      - .:/code
    network_mode: host
于 2021-09-05T11:03:08.330 回答
3

你在哪个平台?host模式仅适用于 Linux AFAIK。如果network_mode不工作试试network: host

version: '3.4'
serivces:
  some_service:
  build:
    network: host
于 2019-06-13T16:19:39.003 回答
3

我认为您应该像这样定义 docker-compose 文件:这只是一个示例,请阅读文档: https ://docs.docker.com/compose/compose-file/#network-configuration-reference

version: "3"
services:
  web:
    image: conatinera:latest
    networks:
      mynetwork: {}
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    ports:
      - "18080:8080"
networks:
  mynetwork:
    external: true
    name: host
于 2019-06-13T16:23:36.507 回答
0

network_mode: 集群模式下不允许主机。

于 2022-02-01T10:11:08.630 回答