eth*_*ypt 2 port docker docker-swarm
我创建了一个docker-compose.yml
包含在两个不同节点上运行的两个服务的文件。这两个服务旨在与客户端和服务器在同一端口上进行通信。下面是我的 docker-compose.yml 文件。
version: "3"
services:
service1:
image: localrepo/image1
deploy:
placement:
constraints: [node.hostname == node1]
replicas: 1
resources:
limits:
cpus: "1"
memory: 1000M
restart_policy:
condition: on-failure
ports:
- 8000:8000
networks:
- webnet
service2:
image: localrepo/image2
deploy:
placement:
constraints: [node.hostname == node2]
replicas: 1
resources:
limits:
cpus: "1"
memory: 500M
restart_policy:
condition: on-failure
ports:
- "8000:8000"
networks:
- webnet
networks:
webnet:
Run Code Online (Sandbox Code Playgroud)
当我发出docker stack deploy -c
错误时,阅读
> Error response from daemon: rpc error: code = 3 desc = port '8000' is already in use by service.
Run Code Online (Sandbox Code Playgroud)
在这篇文章中,我读到在集群中部署服务可以使端口在集群中的任何节点上都可访问。如果我理解正确的话,这使得该端口被集群中的任何节点占用。在同一线程中,建议使用mode=host
发布,这只会公开容器运行的实际主机上的端口。我在端口中将其应用为:
端口:-“模式=主机,目标=8000,发布=8000”
在这两个服务中进行更改并尝试发出 docker stack 会产生另一个错误:
> 1 error(s) decoding:
* Invalid containerPort: mode=host, target=8000, published=8000
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?
ps:我尝试了“Version3”和“Version3.2”,但问题没有解决。
我不知道你是如何指定的,host mode
因为你docker-compose.yml
不代表host mode
任何地方。
顺便说一句,尝试使用可以在文件中指定的长语法。host mode
docker-compose.yml
这个长语法是新的v3.2
,下面是示例(我检查它是否有效)
(这是与语法版本兼容的docker engine
版本。)docker-compose
version: '3.4' # version: '3.2' also will works
networks:
swarm_network:
driver: overlay
services:
service1:
image: asleea/test
command: ["nc", "-vlkp", "8000"]
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.hostname == node1
ports:
- published: 8000
target: 8000
mode: host
networks:
swarm_network:
service2:
image: asleea/test
command: ["nc", "service1", "8000"]
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.hostname == node2
ports:
- published: 8000
target: 8000
mode: host
networks:
swarm_network:
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6261 次 |
最近记录: |