为什么在运行一个简单的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( bash
, sh
等)。
当你试图运行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"]