我有几个网站在Docker中使用LetsEncrypt凭据运行,并通过traefik路由。 我想在Docker中运行一个本地gitlab-ce,类似于LetsEncrypt和traefik。
所以我把它添加到我的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生成证书的安全站点,但该站点未加载:
内部服务器错误
当我重新加载页面时,我在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
为了最大限度地避免疯狂,大约每10个左右(随机)时间我运行docker restart gitlab
该网站完美呈现。我一直试图把它留下来,但其中却充满了疯狂......
我怎样才能让它可靠地出现?或者我如何更完整地调试它?
答案 0 :(得分:10)
这个答案可能对你来说太迟了,但我遇到了同样的问题,并且能够解决它。
重要的线索是日志错误是sshd
守护进程!
默认情况下,Traefik将选择容器公开的第一个端口(通过Dockerfile,而不是您手动公开的端口!)。 对于Gitlab容器,这是 ssh 端口22。
因此,Traefik会将Web请求定向到Gitlab的SSH守护程序。
要解决此问题,您需要使用标签
显式设置Traefik的端口labels:
...
- traefik.port=80
答案 1 :(得分:0)
我已使用sameersbn's 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"
这使得以下traefik docker-compose
保持安静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