docker (за прокси) извлекает данные из реестра контейнеров Azure, но из registry-1.docker.io , он выдает сертификат, подписанный неизвестным органом ошибка

#docker #proxy #ssl-certificate #docker-registry #azure-container-registry

#docker #прокси #ssl-сертификат #docker-registry #azure-container-registry

Вопрос:

В виртуальной машине Ubuntu 18.04

Я нахожусь за прокси, я настроил конфигурацию docker с тем же прокси.

Я создал реестр контейнеров Azure, и при попытке извлечения docker из реестра он работает.

Но при попытке:

узел запуска $ docker: 6

Я получаю сообщение об ошибке: «docker: ответ об ошибке от daemon: Gethttps://registry-1.docker.io/v2 /: x509: сертификат, подписанный неизвестным органом. «

Я добавил реестр в / etc / docker / daemon.json:

{

«небезопасные реестры»: [«registry-1.docker.io «,»myazureContainerRegistry.azurecr.io «]

}

Выполнив вышеуказанный шаг, «$ docker run myazureContainerRegistry.azurecr.io/myimage:tag » работает, но «$ docker run node: 6» по-прежнему выдает ошибку сертификата.

Я добавил сертификат для «*.docker.io » в / etc /docker /certs.d / docker.ввод-вывод, а также в / usr / local / share / ca-certificate (sudo apt update-ca-certificates), по-прежнему не работает.

Я также пытался:

  1. $curl -khttps://registry-1.docker.io /

  2. $wget https://registry-1.docker.io / —no-check-certificate

Оба этих шага работают, но с docker (для запуска / извлечения узла: 6) Я все еще получаю ошибку сертификата.

Вывод «$ docker —version»: «Версия Docker 18.09.2»

Вот как выглядит мой ~/.docker/config.json:

config.json

Я ожидаю, что «docker run node: 6» успешно извлечет изображение, но на самом деле выдает ошибку

Комментарии:

1. Вам необходимо запустить образ с именем сервера реестра или URI. Например, используйте команду docker run registry-1.docker.io/node:6 . Но, во-первых, у вас уже должен быть сертификат.

2. @CharlesXu Я попробовал упомянутую вами команду, но все равно выдает ту же ошибку сертификата

3. Это означает, что у вас нет сертификата в файле ~/.docker/config.json.

Ответ №1:

Для вашей проблемы, прежде всего, вам необходимо иметь сертификат в ~/.docker/config.json. Затем вы можете извлечь изображение из реестра без входа в систему. Затем вы можете выполнить команду, не извлекая изображение ранее. для вас команда, подобная этой:

 docker run registry-1.docker.io/node:6
  

На моей стороне config.json понравится это:

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

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

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

URI реестра в docker hubhttps://index.docker.io/v1/charlesjunqiang.

Обновить

Если вы используете файл сертификата для аутентификации реестра Docker. Затем вам следует выполнить несколько шагов для аутентификации реестра Docker на клиентском компьютере.

Один:

Добавьте файл сертификата в каталог /usr/local/share/ca-certificates/docker-dev-cert/ с именем yourname.crt . Затем выполните команды:

 sudo update-ca-certificates
sudo service docker restart
  

Secord:

Создайте каталог в каталоге /etc/docker/certs.d с тем же именем, что и реестр, например, myregistry.azurecr.io . Затем добавьте в него файл сертификата с именем yourname.cert . Кроме того, вы должны добавить файл as .key, который автоматически создается при создании файла сертификата.

Затем вы можете войти в реестр и выполнить команду docker run registry-1.docker.io/node:6 по своему усмотрению.

На моей стороне есть скриншоты результата.

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

Комментарии:

1. не могли бы вы помочь мне, как получить сертификат по указанному пути

2. @SaumyaGoyal Вы можете вручную добавить сертификат в файл config.json. Или вы можете войти на сервер реестра один раз, и он автоматически добавит сертификат в config.json.

3. Я экспортировал сертификат для «*.docker.io » из Chrome и добавил его в config.json, но все равно я получаю ту же проблему с сертификатом

4. @SaumyaGoyal Я обновляю ответ. Посмотрите и повторите попытку.

5. не могли бы вы, пожалуйста, помочь мне узнать, откуда получить те значения «auth», которые у вас есть в вашем config.json