【问题标题】:Unauthorized error when build docker image with jib, using a custom base image使用自定义基础映像使用 jib 构建 docker 映像时出现未经授权的错误
【发布时间】:2020-04-10 09:32:10
【问题描述】:

我必须创建一个 docker 映像,从一个无发行版的基础映像开始,并带有一些自定义文件。我在我的 Spring Boot 项目中使用 JIB 和 maven。 我正在使用 Docker 工具箱在 Windows 7 上工作。 这是我现在要做的步骤:

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 和密码):

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]

我忘记了什么? 谢谢

【问题讨论】:

    标签: spring docker maven docker-toolbox jib


    【解决方案1】:
    推荐的答案 Google Cloud

    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 守护程序中,您应该说 &lt;image&gt;docker://conf_server_image:latest&lt;/image&gt;。但是,使用来自 Docker 守护程序的映像会产生一些开销(可能可以忽略不计)。因此,最好将基础映像推送到任何容器注册表(本地私有注册表也可以工作)并让 Jib 使用该映像。 Jib 确实会缓存基本图像,因此在注册表中使用图像并不意味着 Jib 会一遍又一遍地下载它。 (当然,如果一个标签指向的图片更新了,Jib会自动下载更新的图片。)

    还有另一种选择,您可以摆脱第一个Dockerfile 步骤。 Jib 通过&lt;extraDirectories&gt; 功能允许adding any arbitrary files 进入图像。默认目录是src/main/jib,例如,如果你放置src/main/jib/foo/bar.txt,你将在构建的镜像中拥有/foo/bar.txt。但是,我知道您可能不想将个人 known_hosts 放入源代码库中。 (可能,您可以设置一个特殊的开发 Maven 配置文件,例如,使用 Maven 资源插件中的 copy-resources 目标将 known_hosts 复制到 src/main/jib。)

    您还可以在 Jib 中设置一些容器配置,包括端口。

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

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

    【讨论】:

      【解决方案2】:

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

      更改此部分:

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

      到:

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

      【讨论】:

        【解决方案3】:

        .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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-09
          • 2021-03-21
          • 2018-04-23
          • 2021-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-20
          相关资源
          最近更新 更多