docker - 带有Traefik的Docker群集堆栈中的Portainer拒绝连接

标签 docker docker-compose traefik docker-swarm-mode portainer

我试图将Portainer包括在由WordPress + MySQL和Traefik(反向代理)组成的docker-compose集群中。我正在使用以下定义:

version: '3'

services:
  traefik:
    image: "traefik:v2.0.0-rc3"
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.swarmmode=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - traefik
    deploy:
      mode: global
      placement:
        constraints: [node.role==manager]

  portainer:
    image: portainer/portainer:latest
    command: -H unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer:/data
    networks:
      - traefik
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role==manager]
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.portainer.entrypoints=web"

  db:
    image: mysql:5.7
    volumes:
      - ./db/initdb.d:/docker-entrypoint-initdb.d
    networks:
      - traefik
    environment:
      MYSQL_ROOT_PASSWORD: <root_password>
      MYSQL_DATABASE: <db_name>
      MYSQL_USER: <db_user>
      MYSQL_PASSWORD: <user_password>
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3

  app:
    image: my-repo/wordpress:latest
    networks:
      - traefik
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.app.rule=Host(`example.org`)"
        - "traefik.http.routers.app.entrypoints=web"
        - "traefik.http.services.app.loadbalancer.server.port=80"

networks:
  traefik:

除portainer之外,其他所有功能均正常。当我访问localhost:9000时,我得到的连接被拒绝。但是,以下非群模式docker-compose可以工作:
version: '3'

services:
  traefik:
    image: "traefik:v2.0.0-rc3"
    container_name: "traefik"
    restart: always
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - traefik

  portainer:
    image: portainer/portainer
    command: -H unix:///var/run/docker.sock
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer:/data
    ports:
      - "9000:9000"
      - "8000:8000"
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.portainer.entrypoints=web"

  db:
    image: mysql:5.7
    restart: always
    volumes:
      - ./db/initdb.d:/docker-entrypoint-initdb.d
    networks:
      - traefik
    environment:
      MYSQL_ROOT_PASSWORD: <root_password>
      MYSQL_DATABASE: <db_name>
      MYSQL_USER: <db_user>
      MYSQL_PASSWORD: <user_password>

  app:
    image: my-repo/wordpress:latest
    restart: always
    depends_on:
      - db
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app.rule=Host(`example.org`)"
      - "traefik.http.routers.app.entrypoints=web"

networks:
  traefik:

我究竟做错了什么?每种情况下的日志都是相同的。在非群模式下,我可以登录到Portainer UI并查看我所有的容器正在运行,等等。但是即使我通过了主机规则(portainer.example.org),群集版本也只是拒绝连接。我只使用Traefik几天了,很可能会犯一个简单的配置错误(希望如此!)。

最佳答案

端口检测
Docker Swarm不向Traefik提供任何port detection信息。
因此,您必须使用标签traefik.http.services。 .loadbalancer.server.port来指定用于通信的端口(请在routing section for Docker中检查此标签的引用)。

关于docker - 带有Traefik的Docker群集堆栈中的Portainer拒绝连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58599572/

相关文章:

mysql - 带有错误 : connect ECONNREFUSED 的 docker mysql

authentication - Docker 推送到 artifactory 给出了 403

c# - Sqlcmd : Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'SA'

docker - Docker在Linux机器上工作,但在Windows机器上工作

mongodb - 尝试连接到 mongodb 容器时,GOLANG 客户端 docker 容器无法访问

kubernetes - Traefik Ku​​bernetes : Expose non Kubernetes service

ssl - Traefik Error forwarding EOF/Bad Gateway (Let's Encrypt 相关)

docker - Docker-使用标签影响启动顺序

python - 需要检查容器是否在运行

docker - docker compose 容器内的 SSH 代理转发