Нет такой ошибки хоста в конвейере Дженкинса при отправке образа docker в несанкционированный частный реестр

#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.