我已经在多台机器上部署了Docker Swarm集群,现在我正尝试从主机访问Docker中运行的服务器。
我使用docker compose文件定义我的服务,并且在检查服务时显示了公开的端口:
"Endpoint": {
"Spec": {
"Mode": "vip",
"Ports": [
{
"Protocol": "tcp",
"TargetPort": 27017,
"PublishedPort": 3017,
"PublishMode": "host"
}
]
},
"Ports": [
{
"Protocol": "tcp",
"TargetPort": 27017,
"PublishedPort": 3017,
"PublishMode": "host"
}
],
"VirtualIPs": [
{
"NetworkID": "**********",
"Addr": "10.0.0.34/24"
}
]
}
我使用主机模式,因为该服务被限制在特定计算机上运行,并且我希望只能从此计算机上访问它。
但是当我列出侦听主机上端口的进程时,该端口没有出现。
当然,我不能通过暴露的端口从主机连接到服务器。
我使用iptables作为防火墙,并尽可能限制开放端口,但是Docker Swarm需要的端口已打开。
这是我的docker-compose.yml文件:
version: '3.4'
services:
mongo-router:
image: mongo
networks:
- mongo-cluster
volumes:
- db-data-router:/data/db
- db-config-router:/data/configdb
ports:
- target: 27017
published: 3017
protocol: tcp
mode: host
deploy:
placement:
constraints:
- node.labels.mongo.router == true
command: mongos --configdb cnf/mongodb-cnf_mongo-cnf-1:27017,mongodb-cnf_mongo-cnf-2:27017,mongodb-cnf_mongo-cnf-3:27017
volumes:
db-data-router:
db-config-router:
networks:
mongo-cluster:
external: true
该网络是覆盖所有服务的覆盖网络。