Ошибка при вставке в докер-хаб с помощью spotify/dockerfile-maven-plugin
У меня есть проект Maven, который построен как образ докера. Я использую https://github.com/spotify/dockerfile-maven для создания этого образа и автоматически включаю его в docker.hub mvn clean install
, build
фаза проходит без проблем. Но на push
У меня есть эта ошибка:
[ERROR] denied: requested access to the resource is denied
[WARNING] An attempt failed, will retry 1 more times
org.apache.maven.plugin.MojoExecutionException: Could not push image
at com.spotify.plugin.dockerfile.PushMojo.execute(PushMojo.java:90)
........
Caused by: com.spotify.docker.client.exceptions.DockerException: denied: requested access to the resource is denied
at com.spotify.plugin.dockerfile.LoggingProgressHandler.handleError(LoggingProgressHandler.java:105)
at com.spotify.plugin.dockerfile.LoggingProgressHandler.progress(LoggingProgressHandler.java:63)
......
Вот мой конфиг плагина:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}-istio</repository>
<tag>latest</tag>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
При нажатии с docker push image-name:tag
все работает.
Здесь я нашел похожую проблему, но добавив зависимость для docker-client v8.8.4
ничего не меняет.
Также этот комментарий предлагает перейти на 1.3.3
версия, но это не работает для меня.
В обоих случаях я вижу в журналах, что он отправляет в один и тот же репозиторий:
The push refers to a repository [docker.io/my-login/my-image-name]
3 ответа
Добавлять <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
в тег конфигурации и укажите учетные данные вашего сервера в maven settings.xml как -
<server>
<id>docker.io</id>
<username>xxxxx</username>
<password>xxxxxx</password>
</server>
Вы создали идентификатор сервера в вашем ~/.m2/settings.xml
файл?
Как здесь:
<servers>
<server>
<id>docker-hub</id>
<username>your_docker_hub_username</username>
<password>you_docker_hub_password</password>
<configuration>
<email>your_docker_hub_email@example.com</email>
</configuration>
</server>
</servers>
Затем вам нужно обратиться к нему в вашем pom.xml (serverId).
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--related to creating image and pushing it to docker hub-->
<imageName>${docker.image.prefix}/${project.artifactId}-istio</imageName>
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<serverId>docker-hub</serverId>
<registryUrl>https://index.docker.io/v1/</registryUrl>
<!--end of related to creating image and pushing it to docker hub-->
</configuration>
</plugin>
Документацию относительно аутентификации можно найти здесь
я использую mvn clean install docker:build
чтобы построить образ, но я думаю, что ваш подход с <executions>...</executions>
должно работать тоже.
Дайте конфигурацию, которую я предоставил (и версию docker-maven-plugin), с предложенной командой mvn, и дайте мне знать, помогает ли это.
Я предполагаю, что вы не получаете сообщение об ошибке, в котором говорится, что ссылка на сервер docker.io не найдена, что означает, что ваши учетные данные settings.xml выбраны правильно. Возможно, ${docker.image.prefix} не является правильным именем пользователя hub.docker.com. Попробуйте жестко закодировать его и посмотреть, работает ли он.