【问题标题】:Traefik Docker Swarm + SonarQubeTraefik Docker Swarm + SonarQube
【发布时间】:2021-09-06 16:00:12
【问题描述】:

请帮忙! 我正在尝试使用代理 Traefik 启动服务 SonarQube。但所有时间都有错误404。 请帮我配置 traefik 以在 swarm 上公开我的服务。我们将部署 10 多个服务。

我的 swarm.yml:

version: "3.7"

services:   traefik:
    image: "traefik:v2.1"
    networks:
      - traefik-public
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik.yml:/traefik.yml:ro

  sonar:
    image: sonarqube:8.9-community
    networks:
      - pg-net
      - traefik-public
    ports:
      - "9000:9000"
    environment:
      - SONAR_JDBC_URL=jdbc:postgresql://sqdb:5432/sonarqube
      - SONAR_JDBC_USERNAME=sonarqube
      - SONAR_JDBC_PASSWORD=N1eC7ALj1P1bOf4!wyhQi
    labels:
      - "traefik.port=9000"
      - "traefik.docker.network=traefik-public"
      - "traefik.enable=true"
      - "traefik.http.routers.sonar.entrypoints=web"
      - "traefik.http.routers.sonar.rule=Host('sonar.example.com')"
    
networks:   traefik-public:
    external: true

traefik.yml 示例:

## STATIC CONFIGURATION
log:
  level: INFO

api:
  insecure: true
  dashboard: true

entryPoints:
  web:
    address: ":80"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
    swarmMode: true

【问题讨论】:

    标签: proxy sonarqube traefik swarm docker-swarm-mode


    【解决方案1】:

    根据documentation

    在 Swarm 模式下,Traefik 使用服务上的标签,而不是单个容器上的标签。

    因此,如果您在 Swarm 模式下使用 compose 文件,则应在服务的部署部分定义标签。

    另请注意附加部分:

    Docker Swarm 不向 Traefik 提供任何端口检测信息。

    因此,您必须使用标签 traefik.http.services..loadbalancer.server.port 指定用于通信的端口

    您应该将标签移动到 deploy 部分并修复端口设置,例如:

      sonar:
        image: sonarqube:8.9-community
        networks:
          - pg-net
          - traefik-public
        environment:
          - SONAR_JDBC_URL=jdbc:postgresql://sqdb:5432/sonarqube
          - SONAR_JDBC_USERNAME=sonarqube
          - SONAR_JDBC_PASSWORD=N1eC7ALj1P1bOf4!wyhQi
        deploy:
          labels:
            - "traefik.docker.network=traefik-public"
            - "traefik.enable=true"
            - "traefik.http.routers.sonar.entrypoints=web"
            - "traefik.http.routers.sonar.rule=Host('sonar.example.com')"
            - "traefik.http.services.sonar.loadbalancer.server.port=9000"
    

    我也不会发布服务的端口 9000(因此从上面的示例中删除),因为这将使您的服务在没有 Traefik 代理的情况下可供所有人使用。 Traefik 将能够与 SonarQube 通信,只要它们在同一网络上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多