Не удается получить доступ к Docker Registry 2 локально через curl или удаленно — Private Docker Registry

Я пытался запустить реестр Docker на своем VPS, но мне не повезло. я читал документы здесьследующие направляющие как цифровой океан, а также гуглить и следить за другими руководствами и сообщениями. Я потратил лучшую половину вчерашнего дня, пытаясь отсортировать это.

Я запускаю настоящий простой реестр докеров. Это мой файл docker-compose.yml:

version: '3.3'
services:
  registry:
    image: registry:latest
    ports:
    - "5017:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./auth:/auth
      - ./data:/data

у меня изначально было так

version: '3'

services:
  registry:
    image: registry:2
    ports:
    - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./data:/data

Я даже пытался запустить его без компоновки docker run p 5017:5000 --restart=always --name registry registry:2 и каждый раз, когда я бегу curl http://localhost:5017/v2/_catalog я получил Recv failure: Connection reset by peer. Я не понимаю. У меня есть куча других контейнеров Docker, которые работают нормально. Я не понимаю, в чем проблема.

Порт открыт

# lsof -i:5017
COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
docker-pr 20836 root    4u  IPv4 88933941      0t0  TCP *:5017 (LISTEN)
docker-pr 20840 root    4u  IPv6 88933946      0t0  TCP *:5017 (LISTEN)

Контейнер поднят

# docker ps
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED         STATUS         PORTS                                       NAMES
fcb3c6320c44   registry:2                                                  "/entrypoint.sh /etc…"   5 seconds ago   Up 3 seconds   0.0.0.0:5017->5000/tcp, :::5017->5000/tcp   registry

Первоначально я начал с того, что просто попытался подключиться из-за пределов моего VPS. Я продолжал получать ошибки 502 и 403. Я использую httpd Apache на CentOS 7.

# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Mar 24 2022 14:57:57

Мой виртуальный хост:

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName docker.domain.com
        ServerAlias www.docker.domain.com

        ErrorLog /var/www/Docker.domain.com/prod/Logs/httpd/error.log
        CustomLog /var/www/Docker.domain.com/prod/Logs/httpd/requests.log combined

        ProxyPreserveHost on
#       ProxyRequests     off
#       ProxyVia On
        ProxyPass        / http://127.0.0.1:5017/
        ProxyPassReverse / http://127.0.0.1:5017/

        Header always set "Docker-Distribution-Api-Version" "registry/2.0"
        Header onsuccess set "Docker-Distribution-Api-Version" "registry/2.0"
        RequestHeader set X-Forwarded-Proto "https"

        SSLEngine on
        SSLProxyEngine On
        SSLCertificateFile /etc/letsencrypt/live/docker.domain.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/docker.domain.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateChainFile /etc/letsencrypt/live/docker.domain.com/chain.pem
    </VirtualHost>
</IfModule>

Я даже остановил apache и попытался установить и использовать nginx:

server {
    listen 80;

    server_name  docker.domain.com www.docker.domain.com;

    # disable any limits to avoid HTTP 413 for large image uploads
    client_max_body_size 0;

    # required to avoid HTTP 411: see Issue #1486 (https://github.com/moby/moby/issues/1486)
    chunked_transfer_encoding on;

    location / {
        # Do not allow connections from docker 1.5 and earlier
        # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
        if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
            return 404;
        }

        # To add basic authentication to v2 use auth_basic setting.
        # auth_basic "Registry realm";
        # auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd;

        ## If $docker_distribution_api_version is empty, the header is not added.
        ## See the map directive above where this variable is defined.
        # add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;

        proxy_pass                          http://localhost:5017;
        proxy_set_header  Host              $http_host;   # required for docker client's sake
        proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto $scheme;
        proxy_read_timeout                  900;
    }
}

Затем доступ к нему через https://docker.domain.com/v2 дает мне либо 502, либо 403 в зависимости от настроек моего VH.

Я был бы очень признателен за любое руководство. Благодарю вас!

Краткое примечание: я также разместил тот же вопрос на Форум докеровно ответа не получил.

Обновить
Это связано с моим брандмауэром iptables. Я отключил iptables, и все работает нормально. Я изучаю и опубликую обновление, как только выясню это.

apache-2.4 докер httpd докер-реестр

джваги

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *