我想将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可以缩放容器。但是documentation中的docker compose文件不起作用。泊坞窗容器不查询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
答案 0 :(得分:1)
docker-compose的等效配置使用network_mode
键:https://docs.docker.com/compose/compose-file/#network_mode
您应该在network_mode
中将"host"
设置为docker-compose.yml
。
答案 1 :(得分:0)
您使用哪个平台? host
模式仅在Linux AFAIK中工作。如果network_mode
无法正常工作,请尝试network: host
?
version: '3.4'
serivces:
some_service:
build:
network: host
答案 2 :(得分:0)
我认为您应该像这样定义docker-compose文件: 这只是一个示例,请阅读文档: https://docs.docker.com/compose/compose-file/#network-configuration-reference
?- time(test(99999989)).
% 3 inferences, 0.016 CPU in 0.016 seconds (100% CPU, 192 Lips)
true.
?- time(test2(99999989)).
% 107 inferences, 0.000 CPU in 0.000 seconds (?% CPU, Infinite Lips)
true.
?- time(test(99999999999900000001)).
% 4 inferences, 0.000 CPU in 0.000 seconds (81% CPU, 190476 Lips)
ERROR: Stack limit (1.0Gb) exceeded
?- time(test2(99999999999900000001)).
% 267 inferences, 0.000 CPU in 0.000 seconds (87% CPU, 1219178 Lips)
true.
答案 3 :(得分:0)
您正在混合在撰写和群集部署中都无效的选项。
如果要使用docker-compose up进行部署,则您的撰写文件应如下所示:
version: "3"
services:
web:
image: conatinera:latest
network_mode: "host"
restart: on-failure
在构建模式下, Te选项deploy
将被忽略,而在使用主机模式网络时,将忽略ports选项。我建议不要使用主机模式网络,并在另一个容器中使用反向代理来平衡已缩放的容器。
(当您明确说明自己没有使用集群部署时,可以忽略答案的这一部分)。
如果您正在使用群体部署,则您的撰写文件应如下所示:
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负载均衡您的副本。