我目前被困在编写 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 的方式更改此设置。
答案 0 :(得分:1)
你应该用一行结束入口点脚本
exec "$@"
docker run
命令覆盖 Dockerfile CMD
,即 passed as arguments to the entrypoint。此行将当前脚本替换为作为参数传递给它的任何内容。
(如果您需要一个特权容器,并在其中运行系统级守护进程,虚拟机可能更合适;与直接在主机上运行这些进程相比,这种方法并没有让您获得太多隔离。)< /p>