NGINX后面的自托管DOCKER GITLAB:没有为此项目存储的容器映像

sxissh06  于 2023-05-22  发布在  Nginx
关注(0)|答案(2)|浏览(133)

在给出负面反馈之前:负反馈的必要条件如下:“这个问题没有显示出任何研究努力;不清楚或没有用”。这两天我一直在找解决办法没有代码显示,这是一种罕见的(几乎是新的)情况(自托管的gitlab和自托管的gitlab注册表),因此文档很少。我也试着在网站管理员中发布这个线程,但是没有gitlab标签(所以没有足够的标签,除非错误地发布了线程)。
我已经张贴了这个答案,希望有人谁已经面临这一点。一个答案实际上可以帮助其他人,现在或将来。
我的docker gitlab示例在group-name > project-name - Container Registry下没有显示任何容器
Gitlab配置正确,gitlab注册表处于活动状态,运行器处于活动状态,我可以完成包含部署的管道:这意味着我的gitlab容器注册表实际上包含了这个特定项目的容器(我还可以看到从我的docker示例中提取的实际镜像,这意味着镜像在那里)。
页面说:

If you are not already logged in, you need to authenticate to the Container Registry by using your GitLab username and password. If you have Two-Factor Authentication enabled, use a Personal Access Token instead of a password.

我该如何登录才能在这里显示我的容器?

4xrmg8kj

4xrmg8kj1#

我能够解决在docker主机中创建证书的问题,如报告的here

mkdir certs
cd certs
# Generate a random password password_file used in the next commands
openssl rand -hex -out password_file 32
# Create a PKCS#10 certificate request
openssl req -new -passout file:password_file -newkey rsa:4096 -batch > registry.csr
# Convert RSA key
openssl rsa -passin file:password_file -in privkey.pem -out registry.key
# Generate certificate
openssl x509 -in registry.csr -out registry.crt -req -signkey registry.key -days 10000

然后将certs文件夹分配给两个(gitlab和registry)容器。

此证书配置允许gitlab和gitlab注册表自动登录并相互对话。

docker-compose.yml文件最终看起来像这样:

version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ee:latest'
    container_name: gitlab-ee
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.org'
        nginx['listen_port'] = 80
        nginx['listen_https'] = false
        gitlab_rails['gitlab_shell_ssh_port'] = 222
        gitlab_rails['registry_enabled'] = true;
        gitlab_rails['registry_api_url'] = 'http://<docker-host-ip>:5001'
        gitlab_rails['registry_key_path'] = '/certs/registry.key'
        registry_external_url 'https://gitlab-reg.example.com'
        registry_nginx['listen_port'] = 5001
        registry_nginx['listen_https'] = false
        registry_nginx['proxy_set_headers'] = {
          "X-Forwarded_Proto" => "https",
          "X-Forwarded_Ssl" => "on"
        }
    ports:
      - '8081:80'
      - '222:22'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
      - './certs:/certs'
    shm_size: '256m'

  registry:
    image: registry
    container_name: registry
    restart: always
    ports:
      - '5001:5000'
    volumes:
      - '$GITLAB_REG/registry:/var/lib/registry'
      - './certs:/certs'
#    environment:
#      - REGISTRY_AUTH_TOKEN_REALM=https://gl.aitribe.it/jwt/auth
#      - REGISTRY_AUTH_TOKEN_SERVICE=container_registry
#      - REGISTRY_AUTH_TOKEN_ISSUER=gitlab-issuer
#      - REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/registry.crt

  gitlab-runner:
    image: gitlab/gitlab-runner:latest
    container_name: gitlab-runner
    restart: always
    volumes:
      - /srv/gitlab-runner/config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock

使用此docker-compose.yml文件需要注意的事项

  • gitlab和gitlab registry在不同的子域上(这不是为了授权而给出的),并且在代理上具有SSL终止的反向代理后面(这就是为什么需要设置头的原因)
  • 默认的registry_API_url(上面链接中的GITLAB_REGISTRY_API_URL,其中配置不涉及OMNIBUS)默认指向127.0.0.1:5000:显然,这在Docker Gitlab安装中永远不会工作:为此,必须将其设置为docker主机ip,指定端口;
  • 由于某种原因,我仍然试图赶上(我读到它的地方试图找到解决方案芽没有给予它那么多的照顾)容器需要设置不在端口5000
  • 如果你按照上面报告的文档中的建议设置env变量(在上面的yml文件中注解掉),你将无法再通过用户名和密码登录注册表,你将需要在gitlab中生成一个令牌
jk9hmnmh

jk9hmnmh2#

我该如何登录才能在这里显示我的容器?
这应该遵循“Authenticate with the Container Registry ALL TIERS”文档,该文档也适用于自托管的GitLab示例。
您看到的消息是通过Docker CLI或类似工具访问Container Registry的一般指南,而不是通过GitLab Web界面。
在GitLab Web界面中,您应该能够看到存储在项目的Container Registry中的Docker镜像列表,而无需额外的身份验证,假设您已经登录到GitLab并拥有项目的相应权限。

相关问题