我试图运行脚本(myScript.R
)如下从CentOS上的图像:
print("AAS")
Dockerfile如下:
FROM rocker/r-base:latest
COPY /myScript.R /myScript.R
RUN Rscript /myScript.R
在Windows上它可以正常运行,但在CentOS命令docker run myName/17_08
返回错误:
Fatal error: you must specify '--save', '--no-save' or '--vanilla'
当我使用选项时,它返回错误:
$ docker run myName/17_08 --no-save
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "--no-save": executable file not found in $PATH: unknown.
ERRO\[0000\] error waiting for container:
我可以做什么来在CentOS上运行这个容器?
1条答案
按热度按时间8ehkhllq1#
简介
坦率地说,我不知道这在Windows上是如何工作的,因为
RUN
是构建时的指令。在本例中,当执行docker run
时,将执行基础图像中的CMD
,如代码中所示,它是[R]
。构建时执行
如果你想在构建时运行你的脚本,请坚持运行指令(确保文件路径有效),它会看起来像这样:
你可以看到你的脚本在第7层运行。
运行时执行脚本
如果您想在运行时运行脚本,基本上有三种不同的选择:使用
CMD
、ENTRYPOINT
或将命令添加到docker run
指令。要理解这些差异,stackoverflow上有一个很好的Answer。CMD
要做到这一点,你需要像这样调整你的Dockerfile:
您可以看到脚本不再在构建时执行:
所以现在你可以运行你的镜像,它会用你指定的命令执行脚本:
使用ENTRYPOINT执行
与上面类似,您可以在图像中使用
ENTRYPOINT
指令。你的Dockerfile看起来像这样:
并且在不执行脚本的情况下,生成的输出也是:
然后在运行时,您将再次收到预期的输出:
通过docker run执行
最后但并非最不重要的是,你可以把你的形象缩小到这个程度:
这使得构建过程更短:
现在,当你运行容器时,传递参数: