我能够通过
docker build -t foo/bar .
成功构建一个Docker镜像。FROM ubuntu:20.04
COPY benchmark.sh /home/benchmarking-programming-languages/benchmark.sh
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]
这是文件benchmark.sh:
#!/usr/bin/env bash
## Nothing here, this is not a typo
但是,通过
docker run -it foo/bar
运行它给我错误:
调用远程方法“docker-run-container”时出错:错误:(HTTP 代码 400)意外 - 无法创建垫片:OCI 运行时创建失败:container_linux.go:380:启动容器进程导致:exec:“/home/benchmarking -programming-languages/benchmark.sh -v": stat /home/benchmarking-programming-languages/benchmark.sh -v: 没有这样的文件或目录:未知
尽管如此,当通过
docker run -it foo/bar sh
将图像作为带有外壳的容器运行时,我不仅可以看到文件,而且可以毫无错误地执行它!在您的
Dockerfile
中,您已将CMD
指定为
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]
这使用了 CMD
由于您只指定了一个字符串
docker
尝试调用可执行文件/home/benchmarking-programming-languages/benchmark.sh -v
- 即一个名为“benchmark.sh -v
”的file,其名称中包含一个空格并以
-v
结尾。但是您实际上打算做的是使用benchmark.sh
参数调用
-v
脚本。
您可以通过将参数正确指定为单独的字符串来做到这一点:
CMD ["/home/benchmarking-programming-languages/benchmark.sh", "-v"]
或使用 shell 语法:
CMD /home/benchmarking-programming-languages/benchmark.sh -v