使用自定义基本映像使用jib构建docker映像时出现未经授权的错误



我必须创建一个docker映像,从发行版的基本映像开始,并使用一些自定义文件。我在我的spring-boot项目中与maven一起使用了JIB。我正在使用Docker工具箱开发Windows7。这是比我现在做的步骤:

1( 使用以下条目创建Dockerfile

FROM gcr.io/distroless/java:8
COPY known_hosts  ~/.ssh/known_hosts
EXPOSE 8888

2( 执行命令:

docker build -t conf_server_image .

3( 在pom.xml上添加了以下行:

<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.1.0</version>
<configuration>
<from>
<image>conf_server_image:latest</image>
</from>
<to>
<image>${project.artifactId}:${project.version}</image>
</to>
<container>
<jvmFlags>
<jvmFlag>-Xms512m</jvmFlag>
<jvmFlag>-Xmx512m</jvmFlag>
</jvmFlags>
</container>
</configuration>
</plugin>

4( 执行命令(使用docker.io的ID和pwd(:

docker login

4( 执行构建命令

mvnw clean compile jib:dockerBuild

但是这个过程返回给我这个错误:

[INFO] Executing tasks:
[INFO] [============                  ] 40,0% complete
[INFO] > building image to Docker daemon
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  12.941 s
[INFO] Finished at: 2020-04-10T11:26:59+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:2.1.0:dockerBuild (default-cli) on project sirio-configuration-server: Build to Docker daemon failed, pe
haps you should make sure your credentials for 'registry-1.docker.io/library/conf_server_image' are set up correctly. See https://github.com/GoogleContainerTools/jib/blob/mast
r/docs/faq.md#what-should-i-do-when-the-registry-responds-with-unauthorized for help: Unauthorized for registry-1.docker.io/library/conf_server_image: 401 Unauthorized
[ERROR] {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"library/conf_server_image","Action":"pull"}]}]}
[ERROR] -> [Help 1]
[ERROR]

我忘了什么?感谢

.m2文件夹中的文件settings.xml应该看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>registry-1.docker.io</id>
<username>YOUR_DOCKER_HUB_USERNAME</username>
<password>YOUR_DOCKER_HUB_PASSWORD</password>
</server>
</servers>
</settings>

参考:https://maven.apache.org/settings.html

conf_server_image:latest作为镜像参考指向Docker Hub(library/conf_server_image:latest的别名(。例如,在Dockerfile中,当您说时

FROM openjdk:11-jre-slim

Docker CLI在Docker Hub上下载openjdk镜像。

$ docker pull openjdk:11-jre-slim
11-jre-slim: Pulling from library/openjdk
...

注意图像参考library/openjdk

要使Jib在本地Docker守护进程中加载映像,应该说<image>docker://conf_server_image:latest</image>。然而,使用Docker守护进程中的映像会产生一些开销(可以忽略不计(。因此,最好将基本映像推送到任何容器注册表(本地私有注册表也可以工作(,并让Jib使用该映像。Jib确实会缓存基本映像,所以在注册表中使用映像并不意味着Jib会反复下载。(当然,如果标签指向的图像被更新,Jib会自动下载更新后的图像。(

还有另一个选项,您可以去掉第一个Dockerfile步骤。Jib允许通过<extraDirectories>功能将任意文件添加到图像中。默认目录是src/main/jib,因此,例如,如果放置src/main/jib/foo/bar.txt,则在构建的映像中会有/foo/bar.txt。但是,我知道您可能不想将个人known_hosts放入源回购中。(您可以设置一个特殊的dev-Maven配置文件,例如,使用Maven Resources插件中的copy-resources目标将known_hosts复制到src/main/jib中。(

您还可以设置一些容器配置,包括起重臂中的端口。

<configuration>
<container>
...
<ports>
<port>8888</port>
</ports>
</container>
</configuration>

最后,因为您使用的是构建的jib:dockerBuild,所以我认为docker login是不必要的。

您正试图将图像推送到存储库registry-1.docker.io

更改此部分:

<to>
<image>${project.artifactId}:${project.version}</image>
</to>

至:

<to>
<image>yourDockerHubRepositoryName/${project.artifactId}:${project.version}</image>
</to>

相关内容

  • 没有找到相关文章

最新更新