Я развернул кластер 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
Сеть является оверлейной сетью, на которую подписываются все службы.