Mar*_*rio 3 bash virtualization docker dockerfile docker-compose
我能够通过docker build -t foo/bar ..
这是它的Dockerfile:
FROM ubuntu:20.04
COPY benchmark.sh /home/benchmarking-programming-languages/benchmark.sh
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]
Run Code Online (Sandbox Code Playgroud)
这是文件benchmark.sh:
FROM ubuntu:20.04
COPY benchmark.sh /home/benchmarking-programming-languages/benchmark.sh
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]
Run Code Online (Sandbox Code Playgroud)
但是,通过运行它docker run -it foo/bar会出现错误:
调用远程方法“docker-run-container”时出错:错误:(HTTP 代码 400)意外 - 无法创建垫片:OCI 运行时创建失败:container_linux.go:380:启动容器进程导致:exec:“/home/benchmarking-编程语言/benchmark.sh -v": stat /home/benchmarking-programming-languages/benchmark.sh -v: 没有这样的文件或目录: 未知
尽管如此,当通过 shell 将图像作为容器运行时docker run -it foo/bar sh,我不仅可以看到该文件,而且可以毫无错误地执行它!
有人可以提出错误发生的原因以及如何修复它吗?
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]
Run Code Online (Sandbox Code Playgroud)
这使用指令的 JSON 语法CMD,即是一个字符串数组,其中第一个字符串是可执行文件,后面的每个字符串是该可执行文件的参数。
由于您只指定了一个字符串,docker因此尝试调用可执行文件/home/benchmarking-programming-languages/benchmark.sh -v- 即名为“ ”的文件benchmark.sh -v,其名称中包含空格并以-v. 但您实际上想要做的是使用参数benchmark.sh调用脚本。-v
您可以通过将参数正确指定为单独的字符串来完成此操作:
CMD ["/home/benchmarking-programming-languages/benchmark.sh", "-v"]
Run Code Online (Sandbox Code Playgroud)
或者使用shell 语法:
CMD /home/benchmarking-programming-languages/benchmark.sh -v
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11392 次 |
| 最近记录: |