Dockerfile:指定独立于docker运行命令的启动命令
我目前一直在写Dockerfile作为一系列CI测试的基础。我们的测试在特权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编写脚本,我希望在
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
命令覆盖DockerfileCMD
,该文件是。此行使用作为参数传递给当前脚本的内容替换当前脚本
(如果您需要一个特权容器,并且要在其中运行系统级守护进程,虚拟机可能是更好的匹配;与直接在主机上运行这些进程相比,这种方法不会给您带来太多的隔离。)我们离开了虚拟机,因为CI作业的启动时间太长,而且它太需要重新操作。但你的答案是有效的。