为什么我在运行简单的docker镜像时遇到oci运行时错误?

时间:2016-09-17 13:41:35

标签: docker dockerfile

我是docker的新手,我想创建一个简单的图像,当我运行它时,我可以在终端上看到它的输出。我试过两种方法:

第一种方式:

  • 我创建了一个包含echo "hello"
  • 的简单bash文件hello.sh
  • 然后我创建了一个包含以下内容的dockerfile:

FROM Scratch ADD script.sh /usr/local/bin/run.sh CMD ["/usr/local/bin/run.sh"]

  • 我使用:go build -t hello_image .
  • 创建了图片
  • 然后使用:go run hello_image
  • 运行图像
  • 我收到了错误:standard_init_linux.go:175: exec user process caused "exec format error"

然后我尝试了第二种方式:

  • 我创建了一个包含以下内容的Dockerfile:

FROM Scratch CMD echo "This is a test."

  • 我构建了图片
  • 我跑了图片
  • 我收到了一个错误:

Error response from daemon: oci runtime error: exec: "/bin/sh": stat /bin/sh: no such file or directory.

任何人都可以帮助我解决这些错误,甚至可以解释我应该怎么做才能创建一个简单的代码图像并在运行时看到它的输出。谢谢

1 个答案:

答案 0 :(得分:4)

scratch图片字面上是“空的”。基本图像没有提供文件,最重要的是没有shell(bashsh等)。

当您尝试运行bash脚本时,它失败了,因为没有bash二进制文件来运行它。 当您尝试运行echo时,它失败了,因为图片中不存在echo二进制文件。

如果要从script运行程序,则需要将其编译为静态ELF二进制文件。这很容易做一些语言(例如go lang)。

如果你想只运行一个bash脚本,你应该尝试从alpine创建一个图像,这是一个最小的Linux发行版:

FROM alpine:3.4
CMD echo "hello"

或者

FROM alpine:3.4
RUN  apk add -U bash
COPY script.sh /usr/local/bin/run.sh
CMD  ["bash", "/usr/local/bin/run.sh"]