0

我必须创建一个 docker 映像,从一个 distroless 基础映像开始,并带有一些自定义文件。我在我的 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]

我忘记了什么?谢谢

4

2 回答 2

1

conf_server_image:latest作为指向 Docker Hub 的图像引用(别名为library/conf_server_image:latest)。例如,在 中Dockerfile,当你说

FROM openjdk:11-jre-slim

Docker CLIopenjdk在 Docker Hub 上下载图像。

$ 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信息放入源代码库中。(可能,您可以设置一个特殊的开发 Maven 配置文件,例如,复制known_hostssrc/main/jib使用copy-resources来自 Maven 资源插件的目标。)

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

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

最后,因为您使用的是jib:dockerBuildwhich builds ,我认为docker login是不必要的。

于 2020-04-10T14:22:21.767 回答
0

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

更改此部分:

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

至:

<to>
  <image>yourDockerHubRepositoryName/${project.artifactId}:${project.version}</image>
</to>
于 2021-08-13T21:51:50.883 回答