我想了解CMD和入口点的工作原理。因此,我刚刚创建了一个非常简单的Dockerfile
FROM scratch
CMD echo "Hello First"
ENTRYPOINT echo "Hello second"
然后我构建了以下图像:
docker build -t my_image .
日志如下:
步骤1/3:从头开始--->步骤2/3:CMD Echo" Hello first" ----> 使用缓存---> 9F2B6A00982F步骤3/3:入口点Echo"您好 第二个" --->使用缓存---> 1BBE520F9526成功构建 1BBE520F9526成功标记了my_image:最新安全警告:您 正在从Windows构建Docker映像,以针对非窗户码头码头 主持人。添加以构建上下文的所有文件和目录 '-RWXR-XR-X'权限。建议仔细检查并重置 敏感文件和目录的权限。
当我创建此图像的容器时,它会返回:
docker run my_image
错误是:
Docker:守护程序的错误响应:OCI运行时创建失败: container_linux.go:344:启动容器进程引起的" exec: "/bin/sh ":stat/b in/sh:没有这样的文件或目录":未知。
有人可以帮助我有关错误吗?
这里有两件事。
启动FROM scratch
的Dockerfile是从根本没有的基本图像开始的。它是完全空的。除了几个设备文件Docker为您推进外,没有一组基本工具或库或其他任何东西。
ENTRYPOINT echo ...
命令被Docker重写为ENTRYPOINT ["/bin/sh", "-c", "echo ..."]
,并使CMD
完全忽略。除非用docker run --entrypoint
覆盖,否则这将成为容器运行的主要过程。
由于它是FROM scratch
映像,并且根本没有任何包含壳,因此不包含外壳,因此"/bin/sh:否此类文件或目录"错误。