我有几个使用LetsEncrypt凭据在docker中运行并通过traefik路由的网站。 我想与LetsEncrypt和traefik类似地在docker中运行本地gitlab-ce。
所以我将其添加到我的traefik.toml文件中:
[[acme.domains]]
main = "gitlab.mydomain.com"
这是config/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生成的证书的安全站点,但是该站点未加载:
Internal Server Error
当我重新加载页面时,我在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
在日志中搜索/error/i ,我发现可能有几件事(zruby/gems/2.3.0/gems/redis-3.2.2z中报告了很多错误),但是没有“吸烟者” AFAICT。
最疯狂的是,我运行docker restart gitlab 时大约每十(随机)次出现一次该站点。我很想把它留在里面,但其中蕴藏着疯狂……
我怎样才能使它可靠地出现?或者我该如何更彻底地调试呢?
Best Answer-推荐答案
对于您来说,这个答案来得太晚了,但是我遇到了同样的问题,并且能够解决。 重要提示是日志错误是由sshd 守护程序造成的! 默认情况下,Traefik将选择容器公开的第一个端口(通过Dockerfile,而不是您手动公开的端口!)。 如果是Gitlab容器,则为ssh端口22。 因此,Traefik将把Web请求定向到Gitlab的SSH守护程序。 要解决此问题,您需要使用标签明确设置Traefik的端口:Traefik 1.x : labels:
...
- traefik.port=80
Traefik 2.x :labels:
- traefik.http.services.<your-service-name>.loadbalancer.server.port=80
关于docker - traefik代理后面的docker中的gitlab失败(通常),我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/42192934/
|