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

时间:2021-03-10 15:12:18

标签: 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 中包含 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 命令中添加一个命令会破坏启动。谁能以独立于 docker run 给出的命令执行 start.sh 的方式更改此设置。

1 个答案:

答案 0 :(得分:1)

你应该用一行结束入口点脚本

exec "$@"

docker run 命令覆盖 Dockerfile CMD,即 passed as arguments to the entrypoint。此行将当前脚本替换为作为参数传递给它的任何内容。

(如果您需要一个特权容器,并在其中运行系统级守护进程,虚拟机可能更合适;与直接在主机上运行这些进程相比,这种方法并没有让您获得太多隔离。)< /p>