簡體   English   中英

無法通過主機上的已發布端口訪問 Docker Swarm 服務

[英]Cannot access a Docker Swarm service through its published port on the host

我已經在多台機器上部署了一個 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

該網絡是一個覆蓋網絡,所有服務都在其上訂閱。

我有一個類似的問題。 Windows 上安裝 hyper-v 功能后(即使 cpu 不支持 hyper-v),我能夠從主機訪問已發布的端口(即使在入口模式下)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM