如何将主机网络用于Docker组成?

问题描述 投票:0回答:6
我想将Docker组合在主机网络中。

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

docker run --net=host -p 18080:8080 -t -i containera
可以访问以

http://127.0.0.1:8080

运行的主机REST API。由于我想扩展容器
containera
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"
我发现Docker构成以扩展容器。但是Docker撰写的文件是从文档中撰写的。 Docker容器不会查询REST API。 

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

network_mode
但属性

Ignoring unsupported options: network_mode

被忽略/不允许。  带有消息

network_mode
    
docker docker-compose
6个回答
185
投票
docker-compose v3的等效配置正在使用

network_mode

键:

https://docs.docker.com/reference/compose-file/services/#network_mode

您应该将

"host"

设置为
docker-compose.yml
如果使用Docker群,请参见
室外的答案。
    

您的混合选项在撰写和群体部署中无效。

如果您正在使用Docker-Compose部署,那么您的撰写文件应该是这样的: version: "3" services: web: image: conatinera:latest network_mode: "host" restart: on-failure


93
投票
deploy

在组合模式下忽略了te选项,并且使用主机模式网络时,端口选项将被忽略。我建议不要使用主机模式网络,并在另一个容器中使用反向代理来平衡您的缩放容器。

(当您澄清自己不使用群体部署时,请随时忽略答案的这一部分)。

如果您正在使用群的部署,那么您的撰写文件应该是这样的:
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

AGAIN,已发布的端口和主机模式网络不混合。也可能是您的缩放量会失败,因为所有容器都将尝试绑定到同一端口。我建议不要使用主机模式网络,并让Docker Load Blone Blace您的副本。


我正面临着同样的问题。我发现,当设置为

network_mode
时,端口映射不起作用,因为容器将寻找主机的端口。因此,卸下端口映射对我有效。

host

docker组成的效果很好
services:
  web-abc:
    build: ./abc
    # ports:
    #   - "7000:7000"
    volumes:
      - .:/code
    network_mode: host

here是一个解释

33
投票

您在哪个平台上? 
extra_hosts: - "host.docker.internal:host-gateway"
模式仅在Linux AFAIK中工作。如果不工作,请尝试
host

network_mode

26
投票

我认为您应该以这样的方式定义Docker-Compose文件: 这只是一个例子,请阅读文档:

https://docs.docker.com/compose/compose-file/#network-configuration-referention-
network: host

我本人在version: '3.4' serivces: some_service: build: network: host


14
投票
上没有成功,但是如果您想访问主机上的网络服务,则可以让主机服务在

networks

网络接口上侦听,这可以从该网络接口上访问在同一IP地址处的容器(取决于您的网络模式)。  下面的概念证明。
主机:
network_mode
在容器中:

docker0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.