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

如何使用docker compose的主机网络?,docker,docker-compose,Docker,Docker Compose,我想用docker编写主机网络 我有一个访问本地RESTAPI的docker容器。通常我跑步 docker run --net=host -p 18080:8080 -t -i containera 它可以访问运行在http://127.0.0.1:8080。因为我想缩放容器containera我找到了docker compose来缩放容器。但是来自的docker compose文件不起作用。docker容器不查询RESTAPI 我尝试了以下撰写文件,但属性无效 version: "3" se

我想用docker编写主机网络

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

docker run --net=host -p 18080:8080 -t -i containera
它可以访问运行在
http://127.0.0.1:8080
。因为我想缩放容器
containera
我找到了docker compose来缩放容器。但是来自的docker compose文件不起作用。docker容器不查询RESTAPI

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

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"
但是属性
网络\u模式
被忽略/不允许。带着信息

Ignoring unsupported options: network_mode

docker compose v3的等效配置是使用
网络模式
键:

您应该在
docker compose.yml
中将
network\u模式设置为
“主机”


如果使用docker swarm,请参阅。

您在哪个平台上<代码>主机
模式仅在Linux AFAIK中工作。如果
网络\u模式
不工作,请尝试
网络:主机

version: '3.4'
serivces:
  some_service:
  build:
    network: host

我认为您应该这样定义docker compose文件: 这只是一个示例,请阅读文档:


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

如果使用docker compose up进行部署,则您的compose文件应如下所示:

version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"        
    restart: on-failure
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
在组合模式下忽略Te选项
deploy
,在使用主机模式联网时忽略端口选项。我建议不要使用主机模式联网,而是在另一个容器中使用反向代理来平衡缩放的容器


(当您澄清您没有使用swarm部署时,请忽略答案的这一部分)

如果您使用swarm部署,则您的撰写文件应如下所示:

version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"        
    restart: on-failure
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平衡您的副本的负载。

在swarm中,如何在版本3中使用此网络模式?或者,我如何添加网络模式,因为我得到了一个不受支持的撰写文件版本,而v3和v2中使用的是3
network\u模式。v1将其命名为
net
:我将
net
添加到我的撰写文件中,但在更新的问题中,net属性与撰写文件一起被忽略,您有
版本:“3”
,因此,您应该使用
网络模式
。尝试了这两种模式,但
网络模式
仍会收到忽略信息我收到错误消息
名称不允许附加属性名称
尝试使用docker composeOn arch linux的3.7版,我收到错误消息“services.web.build Additional property network is not allowed”`onUbuntu:services.build不支持的配置选项:“网络”你在使用docker swarm吗?你是如何部署的<代码>docker组装
docker堆栈部署
?根据这一点,您当前的撰写文件可能会有几个错误。目前我使用swarm。但是,当我使用docker compose up时,也会返回
services.web.build包含不支持的选项:“网络”
Swarm和compose部署非常不同,并且您的yml文件在这两种模式下都是无效的,因为您混合了这两种模式的选项。请说明您打算使用什么部署方法,以便获得正确的答案(并根据您想要的答案添加docker swarm标记和删除docker compose标记),谢谢您的澄清。我想使用compose部署,并将其添加到问题中