我想在每次在Docker中创建容器时运行脚本来附加网络驱动器。根据我的阅读,这应该可以通过设置自定义入口点来实现。这就是我到目前为止所拥有的:
FROM ubuntu
COPY *.py /opt/package/my_code
RUN mkdir /efs && \
apt-get install nfs-common -y && \
echo "#!/bin/sh" > /root/startup.sh && \
echo "mount -t nfs4 -o net.nfs.com:/ /nfs" >> /root/startup.sh && \
echo "/bin/sh -c '$1'" >> /root/startup.sh && \
chmod +x /root/startup.sh
WORKDIR /opt/package
ENV PYTHONPATH /opt/package
ENTRYPOINT ["/root/startup.sh"]
目前我的CMD未正确传递到我/ bin / sh系列,但我想知道是否有更简单的方法来实现这一目标?
不幸的是,我无法控制如何创建容器。这意味着我不能简单地将网络安装命令添加到原始docker命令。
答案 0 :(得分:0)
CMD
应该用作为ENTRYPOINT命令定义默认参数或在容器中执行临时命令的方式
因此,如果您指定了ENTRYPOINT,则CMD将作为附加参数传递给它。这意味着您的入口点脚本应显式处理这些参数。
就您而言,当您运行时:
docker run yourimage yourcommand
您的容器中执行的是:
/root/startup.sh yourcommand
解决方案是在exec "$@"
脚本的末尾添加/root/startup.sh
。这样,它将执行作为其参数给出的任何命令。
您可能想阅读about the ENTRYPOINT mechanisms and its interaction with CMD。