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

我有几个网站在Docker中运行LetsEncrypt凭据,并通过traefik路由。 我想在Docker中运行一个本地的gitlab-ce,类似于LetsEncrypt和traefik。

所以我把这个添加到我的traefik.toml文件中:

[[acme.domains]] main = "gitlab.mydomain.com" 

而这个configuration/ gitlab.rb:

 external_url "http://gitlab.mydomain.com" 

我开始使用gitlab:

 docker run -d --restart=always \ --hostname gitlab.mydomain.com \ --expose 80 \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ --volume /var/log/gitlab:/var/log/gitlab \ --label traefik.frontend.rule=Host:gitlab.mydomain.com \ --name gitlab gitlab/gitlab-ce:latest 

去https://gitlab.mydomain.com/我得到一个安全的网站与LetsEncrypt生成的证书,但该网站不加载:

内部服务器错误

当我重新加载页面,我在docker logs gitlab -f看到这个docker logs gitlab -f

 ==> /var/log/gitlab/sshd/current <== 2017-02-12_16:51:31.00446 Bad protocol version identification 'GET / HTTP/1.1' from 172.17.0.8 port 41138 2017-02-12_16:51:31.26238 Bad protocol version identification 'GET /favicon.ico HTTP/1.1' from 172.17.0.8 port 41140 

在日志中search/error/i我看到几个可能是问题的东西(在zruby / gems / 2.3.0 / gems / redis-3.2.2z中报告了很多错误),但没有“吸烟枪”AFAICT。

为了避免疯狂,大约每运行十次左右(随机),我运行docker restart gitlab站点出现完美。 我一直在试图放弃它,但其中的谎言是疯狂的…

我怎样才能把它可靠地提出来? 或者我怎样才能更完整地debugging呢?

这个答案对你来说可能来得太晚了,但是我遇到了同样的问题,并且能够解决这个问题。

重要的线索是日志错误是由sshd守护进程!

Traefik将默认select容器公开的第一个端口 (通过Dockerfile,而不是手动公开的端口)。 在Gitlab容器的情况下,这是ssh端口22。

所以Traefik将把Web请求指向Gitlab的SSH守护进程。

为了解决这个问题,你需要明确地为Traefik设置端口,标签为:

 labels: ... - traefik.port=80 

我已经使用sameersbn的docker-compose,并在同一目录中添加了以下docker-compose.override.yml。

 version: "2" services: gitlab: labels: - "traefik.frontend.rule=Host:git.schulz.codes" - "traefik.port=80" - "traefik.enable=true" - "traefik.frontend.entryPoints=http,https" 

这继续与以下traefikdocker撰写很好地安静工作

 version: "2" services: proxy: restart: always image: traefik container_name: traefik command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG ports: - "8080:8080" - "80:80" - "443:443" volumes: - ./traefik.toml:/etc/traefik/traefik.toml - /var/run/docker.sock:/var/run/docker.sock - ./data:/etc/traefik/acme:rw 

和这个traefik.toml

 [entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] address = ":443" [entryPoints.https.tls] defaultEntryPoints = ["http", "https"] [acme] email = "yourmail@domain.com" storageFile = "/etc/traefik/acme/acme.json" entryPoint = "https" OnHostRule = true [[acme.domains]] main = "domain.com" sans = ["gitlab.domain.com"] [web] address = ":8080" [docker] endpoint = "unix:///var/run/docker.sock" domain = "docker.localhost" watch = true exposedbydefault = true