修改Docker容器';s ENTRYPOINT在CMD之前运行脚本

修改Docker容器';s ENTRYPOINT在CMD之前运行脚本,docker,Docker,每次在Docker中创建容器时,我都希望运行一个脚本来连接网络驱动器。据我所知,通过设置一个自定义入口点,这应该是可能的。以下是我目前掌握的情况: FROM ubuntu COPY *.py /opt/package/my_code RUN mkdir /efs && \ apt-get install nfs-common -y && \ echo "#!/bin/sh" > /root/startup.sh && \

每次在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命令。

来自:

CMD
应用作定义入口点命令或在容器中执行特殊命令的默认参数的方法

因此,如果指定了入口点,CMD将作为其附加参数传递。这意味着您的入口点脚本应该显式地处理这些参数

在您的情况下,当您运行时:

docker运行yourimage your命令
在您的容器中执行的是:

/root/startup.sh yourcommand
解决方案是在
/root/startup.sh
脚本末尾添加
exec“$@”
。这样,它将执行作为其参数给出的任何命令


您可能需要阅读。

您也可以发布startup.sh吗?如果要继续运行原始命令,通常需要在末尾添加一个
exec“$@”