【问题标题】:Starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory": unknown启动容器进程导致 "exec:\"/bin/sh\": stat /bin/sh: no such file or directory": 未知
【发布时间】:2019-07-16 04:18:42
【问题描述】:

我想了解 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 echo "Hello second" ---> 使用缓存 ---> 1bbe520f9526 构建成功 1bbe520f9526 成功标记 my_image:latest 安全警告:你 正在针对非 Windows Docker 从 Windows 构建 Docker 映像 主持人。添加到构建上下文的所有文件和目录都将具有 '-rwxr-xr-x' 权限。建议仔细检查并重置 敏感文件和目录的权限。

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

docker run my_image

错误是:

docker:来自守护进程的错误响应:OCI 运行时创建失败: container_linux.go:344:启动容器进程导致“exec: \"/bin/sh\": stat /b in/sh: 没有这样的文件或目录": 未知。

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

【问题讨论】:

  • 我想 edit 你的问题来修复 Docker 构建脚本的格式和错误消息,但我猜不出它们的真实样子。请对计算机消息使用代码格式,或者至少不要重新包装它们。

标签: bash shell docker dockerfile


【解决方案1】:

这里发生了两件事。

一个以FROM scratch 开头的 Dockerfile 从一个基本映像开始,其中完全没有任何内容。它完全是空的。除了 Docker 为您推送的几个设备文件之外,没有一套基础工具或库或其他任何东西。

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

由于它是一个FROM scratch 图像并且完全不包含任何内容,因此它不包含外壳,因此会出现“/bin/sh: no such file or directory”错误。

【讨论】:

  • 如何将 sh 安装到镜像中?
  • 构建图像FROM scratch 是一个高级主题。 FROM ubuntu:18.04 可能会给你一个更熟悉的环境。
  • 嗨@DavidMaze,当在Virtualbox 中运行的Linux 虚拟机中启动boot2docker.iso 时,/bin/sh 是存在的,或者更确切地说是由busybox 实现的。 FROM scratch 与启动已发布的 boot2docker.iso 有何不同?
  • Boot2Docker 是虚拟机,而不是 Docker 映像。 FROM scratch 中也没有 nothing。其实没什么。没有忙箱。如果您需要/bin/sh(99%,但不是 100% 的图像需要),则有一个 busybox 图像具有它,但通常人们以 alpine 开头,它可以运行大多数已编译的程序并且更容易扩展.
  • @DavidMaze 谢谢。在 Virtualbox 中运行 boot2docker.iso 会产生与运行 FROM docker 然后使用 RUN 启动脚本相同的执行环境(对于程序或脚本),这是一个合理的假设吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2020-07-15
相关资源
最近更新 更多