gitlab в докере за прокси-сервером traefik не работает (обычно)

У меня есть несколько веб-сайтов, работающих в докере с учетными данными LetsEncrypt и маршрутизируемых через traefik. Я хотел бы запустить локальный 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.

И в довершение к безумию, примерно каждые десять (случайных) раз, когда я запускаю docker restart gitlab, сайт работает идеально. У меня было искушение просто оставить это, но в этом и заключается безумие ...

Как я могу заставить его работать надежно? Или как я могу отладить это более полно?


person OpenPrivacy    schedule 12.02.2017    source источник
comment
Попробуйте изменить http на https. Настроили gitlab.rb, чтобы указать на правильные сертификаты?   -  person Fairy    schedule 13.02.2017
comment
Спасибо - я пробовал и http, и https и указал gitlab на самоподписанные сертификаты, но сайт gitlab (случайным образом) появлялся только в http. Это соответствует тому, как работают traefik и LetsEncrypt (и даже когда gitlab не запущен, на панели инструментов браузера отображается Secure с сертификатом LetsEncrypt).   -  person OpenPrivacy    schedule 13.02.2017
comment
У меня аналогичная проблема в кубернетах envinment (входящий траэфик). С GITLAB_HTTPS=false настройками это всегда успех, но GITLAB_HTTPS=true никогда.   -  person aluc    schedule 11.06.2017


Ответы (2)


Этот ответ, вероятно, приходит слишком поздно для вас, но я столкнулся с той же проблемой и смог ее решить.

Важным признаком является то, что ошибки в журнале принадлежат демону sshd!

По умолчанию Traefik выберет первый порт, предоставленный контейнером (Dockerfile, а не порты, которые вы открываете вручную!). В случае контейнера Gitlab это порт 22 ssh.

Таким образом, Traefik будет направлять веб-запросы демону SSH Gitlab.

Чтобы исправить это, вам нужно явно указать порт для Traefik с меткой:

Traefik 1.x:

labels:
    ...
    - traefik.port=80

Traefik 2.x:

labels:
    - traefik.http.services.<your-service-name>.loadbalancer.server.port=80
person theduke    schedule 23.05.2017
comment
Ярлык для traefik 2.1: traefik.http.services.<your-service-name>.loadbalancer.server.port=80 - person dahe; 20.12.2019
comment
С traefik ›= 2.2.1 он должен быть traefik.http.services.<your-service-name>.loadbalancer.server.port=80 - person strarsis; 13.07.2020

я использовал docker-compose Sameersbn и добавил следующий 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 = "[email protected]"
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
person takethefake    schedule 25.02.2017