启动容器过程导致“ exec:\” / bin / sh \”:统计信息/ bin / sh:无此类文件或目录”:未知

Meh*_*lik 13 bash shell docker dockerfile

我想了解CMD和ENTRYPOINT的工作原理。所以,我刚刚创建了一个非常简单的Dockerfile

FROM scratch

CMD echo "Hello First"

ENTRYPOINT echo "Hello second" 
Run Code Online (Sandbox Code Playgroud)

然后我建立这个形象:

docker build -t my_image .
Run Code Online (Sandbox Code Playgroud)

日志如下:

步骤1/3:从头开始--->步骤2/3:CMD回显“ Hello First” --->使用缓存---> 9f2b6a00982f步骤3/3:ENTRYPOINT回显“ Hello first” --->使用缓存---> 1bbe520f9526已成功构建1bbe520f9526已成功标记my_image:latest安全警告:您正在针对非Windows Docker主机从Windows构建Docker映像。添加到构建上下文的所有文件和目录都将具有“ -rwxr-xr-x”权限。建议仔细检查并重置敏感文件和目录的权限。

当我创建此图像的容器时,它返回:

docker run my_image
Run Code Online (Sandbox Code Playgroud)

错误是:

泊坞窗:来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:344:启动容器进程导致“ exec:\” / bin / sh \”:stat / b in / sh:无此类文件或目录”:未知。

有人可以帮我解决错误吗?

Dav*_*aze 16

这里发生两件事。

FROM scratch从基本映像开始的Dockerfile根本不包含任何内容。它完全是空的。除了Docker为您提供的几个设备文件之外,没有一组基础工具或库或其他任何东西。

ENTRYPOINT echo ...命令被Docker重写为ENTRYPOINT ["/bin/sh", "-c", "echo ..."],并导致CMD完全被忽略。除非被覆盖docker run --entrypoint,否则它将成为容器运行的主要过程。

由于它是FROM scratch映像,根本不包含任何内容,因此它不包含外壳程序,因此出现“ / bin / sh:无此类文件或目录”错误。

  • 如何将 sh 安装到映像中? (2认同)
  • 建立映像“从零开始”是一个高级主题。`FROM ubuntu:18.04`可能会为您提供一个更加熟悉的环境。 (2认同)
  • Boot2Docker是虚拟机,而不是Docker映像。在“ FROM暂存”中也没有“ _”。其实什么都没有。没有Busybox。如果您需要`/ bin / sh`(需要99%,但不是100%的图像),则有一个[`busybox`](https://hub.docker.com/_/busybox/)图像它,但通常人们以[ʻalpine`](https://hub.docker.com/_/alpine/)开头,该代码可以运行大多数已编译的程序,并且更易于扩展。 (2认同)