#docker #jenkins
#докер #дженкинс
Вопрос:
Я пытаюсь перенести образ docker в частный реестр без какой-либо настройки аутентификации. Ниже показано, как выглядят этапы создания файла Дженкинса.
Без команды WriteFile на этапе развертывания я не получаю такой ошибки хоста
docker push lt;private-vm-namegt;:5000/temp/prototype-be:v1 The push refers to repository [lt;private-vm-namegt;:5000/temp/prototype-be] Get https://lt;private-vm-namegt;:5000/v2/: dial tcp: lookup lt;private-vm-namegt; on 127.0.0.11:53: no such host
С помощью команды WriteFile я получаю исключение с доступом
java.nio.file.AccessDeniedException: /etc/docker
Может ли кто-нибудь подсказать мне, как можно устранить эти ошибки, чтобы перейти в частный реестр докеров?
Спасибо.
Этапы создания файла Дженкинса
stage('Building docker image') { steps{ script { dockerImage = docker.build registry ":v1" } } } stage('Pushing docker image') { steps{ script { writeFile file:"/etc/docker/daemon.json", text: "{ "insecure-registries": [ "lt;private-vm-namegt;:5000" ] }" docker.withRegistry( 'http://lt;private-vm-namegt;:5000') { dockerImage.push() } } } }
Комментарии:
1. Вы спрашиваете, как обеспечить аутентификацию реестра docker для плагина docker в конвейере Дженкинса?
2. Нет. В моем личном реестре докеров не настроена проверка подлинности, и это нормально. Мне нужно перенести образ докера в этот частный реестр в моем конвейере Дженкинса. При этом я сталкиваюсь с проблемами, две из которых перечислены выше. Дженкинс работает как контейнер docker, и, насколько я знаю, он создает новый контейнер docker для каждого выполняемого конвейера. Я проверил, что реестр docker доступен на порту 5000, выполнив API GET /v2/_catalog с помощью команды curl с другой виртуальной машины. Мой сервер Дженкинса и реестр частных докеров работают на одной виртуальной машине
Ответ №1:
В качестве обходного пути я выполнил dind
изображение докера Дженкинса-сервера с --insecure-registries
флагом. Поскольку контейнер docker, созданный Дженкинсом, теперь знал о частном реестре docker, вышеприведенная команда push docker сработала. Примечание. Я также изменил команду jenkins push, чтобы использовать ip-адрес сервера вместо имени хоста, чтобы мне не нужно было редактировать /etc/hosts.