【问题标题】:distroless java docker image errordistroless java docker镜像错误
【发布时间】:2018-06-29 17:07:48
【问题描述】:

当我尝试使用 distroless java 基础映像创建 docker 映像时, 当我包含任何 shell 命令时出现以下错误,例如 'mkdir' 、 'chmod' 非常感谢您对此的任何帮助。

OCI 运行时创建失败:container_linux.go:348: 启动容器进程导致“exec:\”/bin/sh\": stat /bin/sh: no such file or directory": 未知

【问题讨论】:

标签: java docker


【解决方案1】:

distroless 提供了一个包含外壳的 debug 图像,以便您可以 exec 进入它:

gcr.io/distroless/java:debug

debug 图像包含busybox。您可以通过以下方式使用 Docker 运行此映像:

docker run -it --entrypoint "/busybox/sh" gcr.io/distroless/java:debug

如果您想直接在 Maven 或 Gradle 项目中使用 distroless 作为基础构建 Java Docker 映像,请查看 Jib

【讨论】:

    【解决方案2】:

    如果您查看list of things in the distroless base image,它只是不包含shell、mkdir、chmod 或其他类似的东西。 Java image 添加了 JVM,就是这样。在预构建的 jar 中,可能无法基于该图像构建比 COPY 更多的图像,并设置一个 CMD 指向它,也许在此过程中设置一些默认的 ENV 变量。

    如果您需要标准 Linux 发行版中包含的基础工具,那么您希望从功能更丰富的基础镜像开始,例如标准 openjdk 镜像。

    【讨论】:

    • 大卫,感谢您的回复。根据我在“google”上的搜索和您的回答,目前看来 distroless java 仅适用于玩具项目。我什至无法使用推荐的 ENTRYPOINT ["/entrypoint.sh"] 将 shell 脚本设置为入口点,因此我无法设置 JAVA_OPTS 和其他环境变量之类的东西。
    • 对于遇到此问题的其他人:github.com/GoogleContainerTools/distroless/issues/168
    【解决方案3】:

    distroless 提供了一个包含 shell 的调试镜像。在 pom 中或从命令提示符运行 docker:

    步骤如下:

    Pom 更改:

    <from>
        <image>gcr.io/distroless/java:11-debug</image>
    </from>
    

    docker 命令:

    docker exec -it sh

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 2016-05-28
      • 2021-07-25
      • 2021-09-22
      • 2020-06-19
      相关资源
      最近更新 更多