Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dockerfile:指定独立于docker运行命令的启动命令_Docker_Dockerfile - Fatal编程技术网

Dockerfile:指定独立于docker运行命令的启动命令

Dockerfile:指定独立于docker运行命令的启动命令,docker,dockerfile,Docker,Dockerfile,我目前一直在写Dockerfile作为一系列CI测试的基础。我们的测试在特权docker容器中运行,因此由 docker run --privileged -v ${HOME}/project_source/:/project_source -it ciimage:ubuntu bash /project_source/somecommand.sh 现在,对于一组新的测试,我们需要在docker容器中装载nfs,这是由于特权容器的缘故。为简单起见,并避免我的用户尝试使用nfs编写脚本,我希望在

我目前一直在写Dockerfile作为一系列CI测试的基础。我们的测试在特权docker容器中运行,因此由

docker run --privileged -v ${HOME}/project_source/:/project_source -it ciimage:ubuntu bash /project_source/somecommand.sh
现在,对于一组新的测试,我们需要在docker容器中装载nfs,这是由于特权容器的缘故。为简单起见,并避免我的用户尝试使用nfs编写脚本,我希望在Dockerfile中包含nfs装载。我创建了一个MWE:
Dockerfile

FROM  ubuntu:focal 
RUN apt update && apt install --yes nfs-common 
COPY start.sh /bin/start.sh
ENTRYPOINT ["/bin/bash", "/bin/start.sh"] 

start.sh

#!/bin/bash
mkdir -p /run/sendsigs.omit.d
/etc/init.d/rpcbind start
/etc/init.d/nfs-common start
mount nfs-master:/srv/install /mnt 

但是在构建Dockerfile之后,将命令添加到
docker run
命令会破坏启动。我可以用start.sh独立于docker run给出的命令来执行的方式来更改它,您应该用以下行结束entrypoint脚本

exec“$@”
docker run
命令覆盖Dockerfile
CMD
,该文件是。此行使用作为参数传递给当前脚本的内容替换当前脚本


(如果您需要一个特权容器,并且要在其中运行系统级守护进程,虚拟机可能是更好的匹配;与直接在主机上运行这些进程相比,这种方法不会给您带来太多的隔离。)

我们离开了虚拟机,因为CI作业的启动时间太长,而且它太需要重新操作。但你的答案是有效的。