当我尝试使用非发行版的Java基本映像创建docker映像时, 当我包含诸如'mkdir','chmod'之类的任何shell命令时,都会出现以下错误 对此,我们将给予任何帮助。
OCI运行时创建失败:container_linux.go:348:启动容器进程导致“ exec:\” / bin / sh \”:stat / bin / sh:没有此类文件或目录”:未知
答案 0 :(得分:1)
distroless
提供了一个包含外壳的debug
图像,以便您可以exec
插入其中:
gcr.io/distroless/java:debug
debug
图像包含busybox。您可以通过以下方式使用Docker运行此映像:
docker run -it --entrypoint "/busybox/sh" gcr.io/distroless/java:debug
如果您想使用distroless
作为基础在Maven或Gradle项目中直接构建Java Docker映像,请签出Jib。
答案 1 :(得分:1)
distroless 提供了一个包含 shell 的调试镜像。在 pom 中或从命令提示符运行 docker :
步骤如下:
Pom 变化:
<from>
<image>gcr.io/distroless/java:11-debug</image>
</from>
docker 命令:
docker exec -it sh
答案 2 :(得分:0)
如果您查看list of things in the distroless base image,则其中仅不包含shell,mkdir,chmod或其他类似内容。 Java image添加了JVM,仅此而已。可能无法基于该图像在预建的jar中完成比COPY
还要多的工作,并设置CMD
指向它,也许会设置一些默认的ENV
变量。
如果您需要标准Linux发行版中包含的基本工具,那么您希望从功能更强大的基本映像开始,例如标准openjdk映像。