traefik代理背后的Gitlab“网关超时”

Posted

技术标签:

【中文标题】traefik代理背后的Gitlab“网关超时”【英文标题】:Gitlab 'Gateway Timeout' behind traefik proxy 【发布时间】:2018-03-23 17:32:55 【问题描述】:

所以我正在尝试使用 traefik 作为反向代理在 docker swarm 上设置一个 gitlab-ce 实例。

这是我的代理堆栈;

version: '3'

services:
  traefik:
    image: traefik:alpine
    command: --entryPoints="Name:http Address::80 Redirect.EntryPoint:https" --entryPoints="Name:https Address::443 TLS" --defaultentrypoints="http,https" --acme --acme.acmelogging="true" --acme.email="freelyformd@gmail.com" --acme.entrypoint="https" --acme.storage="acme.json" --acme.onhostrule="true" --docker --docker.swarmmode --docker.domain="mydomain.com" --docker.watch --web
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    networks:
      - traefik-net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints:
          - node.role == manager

networks:
  traefik-net:
    external: true

还有我的 gitlab 堆栈

version: '3'

services:
  omnibus:
    image: 'gitlab/gitlab-ce:latest'
    hostname: 'lab.mydomain.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://lab.mydomain.com'
        nginx['listen_port'] = 80
        nginx['listen_https'] = false
        registry_external_url 'https://registry.mydomain.com'
        registry_nginx['listen_port'] = 80
        registry_nginx['listen_https'] = false
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        gitlab_rails['gitlab_email_from'] = 'lab@mydomain.com'
        gitlab_rails['gitlab_email_reply_to'] = 'lab@mydomain.com'
    ports:
      - 2222:22
    volumes:
      - gitlab_config:/etc/gitlab
      - gitlab_logs:/var/log/gitlab
      - gitlab_data:/var/opt/gitlab
    networks:
      - traefik-net
    deploy:
      labels:
        traefik.enable: "port"
        traefik.frontend.rule: 'Host: lab.mydomain.com, Host: registry.mydomain.com'
        traefik.port: 80
      placement:
        constraints:
          - node.role == manager

  runner:
    image: 'gitlab/gitlab-runner:v1.11.4'
    volumes:
      - gitlab_runner_config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock

volumes:
  gitlab_config:
  gitlab_logs:
  gitlab_data:
  gitlab_runner_config:

networks:
  traefik-net:
    external: true

traefik-net 是一个覆盖网络

所以当我使用docker stack deploy 进行部署并访问lab.mydomain.com 时,我收到Gateway Timeout 错误。当我在 gitlab 容器中执行 curl localhost 时,它似乎工作正常。不知道是什么问题,欢迎指点

【问题讨论】:

【参考方案1】:

原来我所要做的就是将 traefik 标签,traefik.docker.network 设置为 traefik-net,参见 https://github.com/containous/traefik/issues/1254

【讨论】:

你最终的 docker-compose.yml 到底是什么? 有点旧但在这里查看github.com/freelyformd/swarm-boilerplate/blob/master/gitlab/…

以上是关于traefik代理背后的Gitlab“网关超时”的主要内容,如果未能解决你的问题,请参考以下文章

traefik 代理后面的 docker 中的 gitlab 失败(通常)

解析 HTTP 404 响应正文的反向代理错误背后的 Gitlab 注册表:JSON 输入的意外结束:“”

Docker 的 Nginx 504 网关超时

使用 Spring 云网关和 Nginx 作为反向代理的网关超时

Nginx 反向代理导致 504 网关超时

使用 Zuul 代理服务器时出现“网关超时”错误