我有一个访问本地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
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
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是一个解释
您在哪个平台上?
extra_hosts:
- "host.docker.internal:host-gateway"
模式仅在Linux AFAIK中工作。如果不工作,请尝试
host
?
network_mode
我认为您应该以这样的方式定义Docker-Compose文件: 这只是一个例子,请阅读文档:
https://docs.docker.com/compose/compose-file/#network-configuration-referention-network: host
我本人在version: '3.4'
serivces:
some_service:
build:
network: host
networks
网络接口上侦听,这可以从该网络接口上访问在同一IP地址处的容器(取决于您的网络模式)。 下面的概念证明。主机:
network_mode
在容器中:
docker0