【发布时间】:2019-08-14 15:10:49
【问题描述】:
我正在运行一个自托管的 gitlab docker 实例,但我在配置注册表时遇到了一些问题,因为我确实收到了错误
Error response from daemon: Get https://example.com:4567/v2/: dial tcp <IP>:4567: connect: connection refused
为了做docker login example.com:4567。
所以看来我必须以某种方式公开端口
4567。一个(更好的)替代方法是为注册表配置第二个域 - 例如
registry.example.com。正如您在下面看到的,我正在为我的 gitlab 实例使用letsencrypt证书。但是如何获得注册表的第二个证书?
这就是我的 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 中进行设置?
更新
我只是通过 jwilder 包配置 nginx,没有改变任何东西。所以我的 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"
【问题讨论】:
-
我知道您有一个域
example.com配置为指向您在Docker 中托管Gitlab 的机器和一个带有nginx 的反向代理,对吗?如果可以,能否上传相关的nginx配置? -
@PierreB。我正在使用配置 nginx 的 jwilder 包。我不需要改变任何东西......
-
那你的
jwilder/nginx-proxy配置是什么? (您配置了哪个主机?)这可能是代理配置的问题,它没有正确公开端口 -
@PierreB。刚刚更新了帖子以显示我如何运行 nginx 代理。我没有配置其他任何东西。只需在我的 ubuntu 服务器上运行 docker-compose 即可。一切都在注册表之外工作......
-
感谢您提供详细信息,我试图在回答中提供一些线索
标签: docker docker-compose gitlab lets-encrypt