Как получить удаленный доступ к частному реестру докеров?

Я пытаюсь настроить частный реестр докеров, используя изображение, взятое из: https://github.com/docker/docker-registry

Просто запустив:
docker run -p 5000:5000 registry

Я могу вытащить/нажать из/в этот репозиторий только с локального хоста, но если я попытаюсь получить доступ к нему с другого компьютера (используя частный адрес в той же локальной сети), он выдает сообщение об ошибке:

*2014/11/03 09:49:04 Error: Invalid registry endpoint https ://10.0.0.26:5000/v1/': 
Get https:// 10.0.0.26:5000/v1/_ping: Forbidden. If this private 
registry supports only HTTP or HTTPS with an unknown CA certificate,
please add `--insecure-registry 10.0.0.26:5000` to the daemon 
arguments. In the case of HTTPS, if you have access to the registry's
CA certificate, no need for the flag; simply place the CA certificate 
at /etc/docker/certs.d/10.0.0.26:5000/ca.crt*

Что сводит меня с ума, так это то, что я могу получить доступ к нему успешно, используя: curl 10.0.0.26:5000 и/или curl 10.0.0.26:5000/v1/search

Я также не понимаю, где и как я должен передать флаг --insecure-registry.

Ответ 1

ОК - я нашел решение этого - после дня копания.

Для докеров ниже 1.12.1:

Оказывается, новая версия клиента отказывается работать с частным реестром без SSL.

Чтобы исправить это - демон на клиентской машине должен быть запущен с небезопасным флагом:

Просто введите:

sudo service docker stop # to stop the service

а затем

sudo docker -d --insecure-registry 10.0.0.26:5000

(замените 10.0.0.26 на свой собственный IP-адрес).

Я бы ожидал, что ребята-докеры добавят этот параметр в командную строку pull/push...

Изменить - altenantively - вы можете добавить флаг в переменную DOCKER_OPTS env внутри /etc/default/docker... и затем sudo service docker restart

Изменить снова. Кажется, что ребята-докеры на нем - и скоро исправит: https://github.com/docker/docker/pull/8935

Для докера 1.12.1:

Пожалуйста, следуйте ниже ответа vikas027 (действительный для centos)

Ответ 2

Отредактируйте файл конфигурации "/etc/default/docker"

sudo vi/etc/default/docker

добавить строку в конец файла

DOCKER_OPTS = "$ DOCKER_OPTS --insecure-registry = 192.168.2.170: 5000"

(замените 192.168.2.170 на свой собственный IP-адрес)

и перезапустите службу докеров

перезагрузка службы sudo docker

Ответ 3

Это то, что сработало для меня в CentOS 7.2 и Docker 1.12.1 (последняя по состоянию на дату). Мой личный реестр v2 работает на 192.168.1.88:5000, измените его соответствующим образом. Это также работает, если у вас несколько реестров, просто продолжайте добавлять --insecure-registry IP:Port

$ sudo vim /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd 
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.88:5000
$
$ sudo systemctl stop docker
$ sudo systemctl daemon-reload
$ systemctl start docker

Ответ 4

Ok. Вот как я получил его на работу. Если вы видите эту ошибку в докере 1.3.2 или выше, сделайте это

перейти к /etc/sysconfig/docker

other_args="--insecure-registry 10.0.0.26:5000"

и запустите

sudo service docker restart

Ответ 5

Я нашел следующее очень полезным, поскольку он обсуждает, как настроена служба Docker. https://docs.docker.com/articles/systemd/

Наряду с этой статьей в команде systemctl https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

Я использовал следующую серию команд в контейнере на основе Centos 7 с результирующим изображением, полученным с помощью "реестра докеры: 2.1.1"

sudo mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
sudo touch override.conf
sudo nano override.conf

И внутри файла override.conf добавлено следующее.

[Service]
ExecStart=
ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

Обратите внимание на первый, пустой, ExecStart = очищает все, что уже существует, поэтому не забудьте добавить что-либо из инструкции /usr/lib/systemd/system/docker.service ExecStart =, которую вы хотите сохранить.

Если вы не укажете опцию -d (daemon), вы получите сообщение "Пожалуйста, укажите только одну -Н".

После выполнения следующей серии команд я могу видеть мои переопределения на месте.

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl status docker

docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
  Drop-In: /etc/systemd/system/docker.service.d
           └─override.conf
   Active: active (running) since Thu 2015-09-17 13:37:34 AEST; 7s ago
     Docs: https://docs.docker.com
 Main PID: 5697 (docker)
   CGroup: /system.slice/docker.service
           └─5697 /usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

ПРИМЕЧАНИЕ. Информация, предоставленная с помощью Loaded: и Drop-In: строк в сообщении о состоянии, полезна для проверки того, что происходит с существующим демоном докеров.

ПРИМЕЧАНИЕ. Также посмотрите в файле Loaded: docker.service для параметра EnvironmentFile = для дальнейших подсказок.

Ответ 6

используйте следующую команду, заменяющую {YOUR_REGISTRY} в вашем реестре

boot2docker ssh "echo $'EXTRA_ARGS=\"--insecure-registry {YOUR_REGISTRY}\"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"

Ответ 7

изменить файл docker.service, добавить --insecure-registry x.x.x.x после -d флаг, перезагрузить docker

это единственное, что сработало для меня, DOCKER_OPTS не имеет никакого эффекта

Ответ 8

Докер 1.12.1

Для CentOS 7.2

/usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000

Для ubuntu 16.04

/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd://
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000 -H fd://

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker

Кажется, опция -insecure-registry может использоваться как с идентификатором, так и без него и с идентификатором реестра.

Ответ 9

Я обнаружил, что версия клиентского докере и версия докеры реестра должны совпадать, иначе вы столкнулись бы с проблемами подключения, несмотря на то, что все на месте.

Ответ 10

Это основано на ответе от vikas027 на Centos 7 и Docker 1.12

Поскольку я за прокси-сервером, мое полное решение было...

/etc/systemd/system/docker.service.d/http-proxy.conf

[Service]

Environment="FTP_PROXY={{MY_PROXY}}"
Environment="ftp_proxy={{MY_PROXY}}"

Environment="HTTPS_PROXY={{MY_PROXY}}"
Environment="https_proxy={{MY_PROXY}}"

Environment="HTTP_PROXY={{MY_PROXY}}"
Environment="http_proxy={{MY_PROXY}}"

Environment="NO_PROXY=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"
Environment="no_proxy=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"

/usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry {{MY_INSECURE_REGISTRY_IP}}:5000

и не забудьте перезапустить:)

sudo systemctl daemon-reload; sudo systemctl restart docker;

Ответ 11

Настройка локального небезопасного реестра в докере вместе с прокси:

1) в ubuntu добавьте следующий флаг --insecure-registry IP: порт под DOCKER_OPTS в файле /etc/default/docker

1.1) настройте переменную no_proxy env для обхода локального IP/hostname/domainname... поскольку прокси может вызывать интерактивный msg... как продолжение и этот промежуточный msg смущает клиента докеров и, наконец, timeout...

1.2), если доменное имя настроено... тогда не забудьте обновить файл /etc/hosts, если не используете DNS.

1.3) в /etc/default/docker устанавливают переменные env http_proxy и https_proxy..., поскольку он позволяет загружать изображения из внешних концентраторов компании.    format http_proxy = http://username:[email protected]:port

2) перезапустите службу докеров... если она установлена ​​как служба, перезапустите перезагрузку службы sudo

3) перезапустить контейнер реестра [sudo docker run -p 5000: 5000 registry: 2]

4) пометьте нужное изображение с помощью sudo docker tag imageid IP: port/imagename/tagname ifany

5) нажмите изображение... sudo docker push ip: port/imagename

6) Если u хочет вытащить изображение с другого компьютера, скажите B без TLS/SSL, тогда  в B применяют сетки 1,1,1 и 2.  Если эти изменения не выполняются в машине B... pull не удастся.

Ответ 12

Ubuntu 16.04

Создать (не существует) файл /etc/systemd/system/docker.service.d/registry.conf с содержимым:

[Service]
#You need the below or you 'ExecStart=' or you will get and error 'Service has more than one ExecStart= setting, which is only allowed'
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.20.30.40:5000

затем

sudo systemctl stop docker
sudo systemctl daemon-reload
sudo systemctl start docker

Ответ 13

Следующее тестирование было выполнено с помощью

[email protected]:~$ docker -v
Docker version 17.05.0-ce, build 89658be

Я пробовал все вышеупомянутые ответы, но ни один из них не работал у меня.

Я следил за этими инструкциями, чтобы заставить его работать

openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
  -x509 -days 365 -out certs/domain.crt

и

Linux: Copy the domain.crt file to
/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt on every Docker
host. You do not need to restart Docker.

и возникли другие проблемы, которые были решены следующим образом:

Проблема 1

Error response from daemon: Get https://10.20.30.40:8001/v1/users/: x509: cannot validate certificate for 10.20.30.40 because it doesn't contain any IP SANs

решение

размещение хоста в /etc/hosts:

10.20.30.40 somehost

Проблема 2

Error response from daemon: Get https://somehost:8001/v1/users/: x509: certificate is valid for , not somehost

решение

запустите команду openssl

$ openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
  -x509 -days 365 -out certs/domain.crt

нажмите enter на каждом шаге, за исключением:

Common Name (e.g. server FQDN or YOUR name) []:

и введите fqdn реестра, т.е. somehost

Обязательно используйте имя myregistrydomain.com как CN.

регистрация в реестре завершается успешно

Проблема 3

Ошибка ответа от демона: Get https://somehost:8001/v1/users/: x509: сертификат, подписанный неизвестным пользователем

решение

sudo mkdir -p /etc/docker/certs.d/somehost:8001/
sudo cp certs/domain.crt /etc/docker/certs.d/somehost:8001/ca.crt

Ответ 14

В дополнение к приведенным выше ответам я добавляю то, что работало в "докере для mac" для меня:

  • Нажмите значок значок док-кита из основного лотка в верхнем правом углу экрана.
  • Нажмите Настройки → Демон.
  • Добавьте IP-адрес и порт в небезопасные реестры.
  • Перезапустите Daemon.

введите описание изображения здесь

Ответ 15

Чтобы избавить вас от хлопот, почему бы вам просто не воспользоваться бесплатной частной службой регистрации докеров, предоставляемой gitlab - отлично работает

https://about.gitlab.com/2016/05/23/gitlab-container-registry/

Их реестр защищен, поэтому у вас не будет проблем.