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

我是新来的docker,我想创build一个简单的图像,当我运行它我可以看到它的terminal输出。 我试了两种方法:

第一种方式:

  • 我创build了一个简单的bash文件hello.sh,其中包含echo "hello"
  • 然后我创build了一个dockerfile,其中包含:

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

  • 我使用以下命令创build了图像: go build -t hello_image .
  • 然后使用以下命令go run hello_image映像: go run hello_image
  • 我收到并报错: standard_init_linux.go:175: exec user process caused "exec format error"

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

  • 我创build了一个Dockerfile,其中包含:

FROM Scratch CMD echo "This is a test."

  • 我build立了形象
  • 我跑了图像
  • 我得到一个错误:

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

任何人都可以帮助我解决这个错误,甚至可以解释我应该如何创build我的代码的简单图像,并看到它的输出,当我运行它。 谢谢

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

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

如果你想从script运行一个程序,你需要把它编译成一个静态的ELF二进制文件。 这很容易做一些语言(例如朗)。

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

 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"]