作者:小茹可爱的家1982 | 来源:互联网 | 2022-11-14 10:05
我想了解CMD和ENTRYPOINT的工作原理。所以,我刚刚创建了一个非常简单的Dockerfile
FROM scratch
CMD echo "Hello First"
ENTRYPOINT echo "Hello second"
然后我建立这个形象:
docker build -t my_image .
日志如下:
步骤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
错误是:
泊坞窗:来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:344:启动容器进程导致“ exec:\” / bin / sh \”:stat / b in / sh:无此类文件或目录”:未知。
有人可以帮我解决错误吗?
1> David Maze..:
这里发生两件事。
FROM scratch
从基本映像开始的Dockerfile根本不包含任何内容。它完全是空的。除了Docker为您提供的几个设备文件之外,没有一组基础工具或库或其他任何东西。
该ENTRYPOINT echo ...
命令被Docker重写为ENTRYPOINT ["/bin/sh", "-c", "echo ..."]
,并导致CMD
完全被忽略。除非被覆盖docker run --entrypoint
,否则它将成为容器运行的主要过程。
由于它是FROM scratch
映像,根本不包含任何内容,因此它不包含外壳程序,因此出现“ / bin / sh:无此类文件或目录”错误。
建立映像“从零开始”是一个高级主题。`FROM ubuntu:18.04`可能会为您提供一个更加熟悉的环境。
Boot2Docker是虚拟机,而不是Docker映像。在“ FROM暂存”中也没有“ _”。其实什么都没有。没有Busybox。如果您需要`/ bin / sh`(需要99%,但不是100%的图像),则有一个[`busybox`](https://hub.docker.com/_/busybox/)图像它,但通常人们以[ʻalpine`](https://hub.docker.com/_/alpine/)开头,该代码可以运行大多数已编译的程序,并且更易于扩展。