Выставьте порт в docker-compose или настройте второй сертификат letsencrypt - PullRequest
2 голосов
/ 24 марта 2019

У меня запущенный экземпляр докера gitlab, но я сталкиваюсь с некоторыми проблемами при настройке реестра, так как у меня появляется ошибка

Error response from daemon: Get https://example.com:4567/v2/: dial tcp <IP>:4567: connect: connection refused

для выполнения docker login example.com:4567.

  1. Так что, похоже, мне нужно каким-то образом выставить порт 4567.

  2. (лучшей) альтернативой будет настройка второгодомен для реестра - вроде registry.example.com.Как вы можете видеть ниже, я использую сертификаты letsencrypt для моего экземпляра gitlab.Но как мне получить второй сертификат для реестра?


Вот так выглядит мой docker-compose - я использую jwilder/nginx-proxy для моего обратного прокси.

docker-compose.yml

gitlab:
  image: gitlab/gitlab-ce:11.9.0-ce.0
  container_name: gitlab
  networks:
    - reverse-proxy
  restart: unless-stopped
  ports:
    - '50022:22'
  volumes:
    - /opt/gitlab/config:/etc/gitlab
    - /opt/gitlab/logs:/var/log/gitlab
    - /opt/gitlab/data:/var/opt/gitlab
    - /opt/nginx/conf.d:/etc/nginx/conf.d
    - /opt/nginx/certs:/etc/nginx/certs:ro
  environment:
    VIRTUAL_HOST: example.com
    VIRTUAL_PROTO: https
    VIRTUAL_PORT: 443
    LETSENCRYPT_HOST: example.com
    LETSENCRYPT_EMAIL: certs@example.com

gitlab.rb

external_url 'https://example.com'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = '/etc/nginx/certs/example.com/fullchain.pem'
nginx['ssl_certificate_key'] = '/etc/nginx/certs/example.com/key.pem'
gitlab_rails['backup_keep_time'] = 604800
gitlab_rails['backup_path'] = '/backups'
gitlab_rails['registry_enabled'] = true

registry_external_url 'https://example.com:4567'
registry_nginx['ssl_certificate'] = "/etc/nginx/certs/example.com/fullchain.pem"
registry_nginx['ssl_certificate_key'] = "/etc/nginx/certs/example.com/key.pem"

Для второй альтернативы это будет выглядетькак:

registry_external_url 'https://registry.example.com'
registry_nginx['ssl_certificate'] = "/etc/nginx/certs/registry.example.com/fullchain.pem"
registry_nginx['ssl_certificate_key'] = "/etc/nginx/certs/registry.example.com/key.pem"

Но как мне настроить это в моем docker-compose?


Обновление

Я просто настраиваю nginxчерез пакет jwilder, не меняя ничего.Так что эта часть моего файла docker-compose.yml выглядит так:

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    networks:
      - reverse-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /opt/nginx-proxy/vhost.d:/etc/nginx/vhost.d:rw
      - /opt/nginx/certs:/etc/nginx/certs:ro
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro

  nginx-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-letsencrypt
    networks:
      - reverse-proxy
    depends_on:
      - nginx-proxy
    volumes:
      - /opt/nginx-proxy/vhost.d:/etc/nginx/vhost.d:rw
      - html:/usr/share/nginx/html
      - /opt/nginx/certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:rw
    environment:
      NGINX_PROXY_CONTAINER: "nginx-proxy"

1 Ответ

3 голосов
/ 26 марта 2019

TL;DR:

Так что, похоже, мне нужно каким-то образом выставить порт 4567.

Да, однако jwilder/nginx-proxy нетподдержка более одного порта на виртуальный хост, а порт 443 уже открыт.Для этой функции существует запрос на получение , но он еще не был объединен.Вам нужно будет открыть этот порт другим способом (см. Ниже)


Вы используете jwilder/nginx-proxy в качестве обратного прокси для доступа к экземпляру Gitlab в контейнере, но с вашим текущимдоступен только порт конфигурации 443:

environment:
    VIRTUAL_HOST: example.com
    VIRTUAL_PROTO: https
    VIRTUAL_PORT: 443

Все остальные службы Gitlab (включая реестр на порту 4567) не проксируются и поэтому недоступны через example.com.

К сожалению, невозможно пока предоставить несколько портов для одного имени хоста с jwilder/nginx-proxy.Для этого варианта использования существует запрос на извлечение , но он еще не был объединен (вы не единственный, кто столкнулся с такой проблемой).

(лучшей) альтернативой будет настройка второго домена для реестра

Это не будет работать, если вы продолжаете использовать jwilder/nginx-proxy, даже если вы изменилиregistry_external_url, вы все еще застряли с проблемой порта, и вы не можете выделить один и тот же порт для двух разных служб.

Что вы можете сделать:

  • голосовать и комментировать упомянутый PR для объединения:)
  • попытаться построить образ Docker из упомянутых запросов на получение запросаfork и настройте ваш compose таким образом, как VIRTUAL_HOST=example.com:443,example.com:4567
  • , сконфигурируйте обратный прокси-сервер вручную для порта 4567 - вы можете добавить простой контейнер nginx в дополнение к вашей текущей конфигурации, которая специально сделаетили переконфигурируйте всю схему прокси-сервера, не используя jwilder images
  • , обновите свою конфигурацию, чтобы выставить example.com:4567 вместо example.com:443, но вы потеряете доступ HTTPS,(хотя это, вероятно, не то, что вы ищете)

Я знаю, что это не дает конечного решения, но я надеюсь, что это поможет.

...