如何在docker run中发生任何其他事情之前先运行特定文件

时间:2019-04-19 14:38:48

标签: docker

我有以下docker文件。


MAINTANER Your Name "youremail@domain.tld"

RUN apt-get update -y && \
    apt-get install -y python-pip python-dev

# We copy just the requirements.txt first to leverage Docker cache
COPY ./requirements.txt /app/requirements.txt

WORKDIR /app

RUN pip install -r requirements.txt

COPY . /app

ENTRYPOINT [ "python" ]

CMD [ "app.py" ]

即使在app.py文件运行之前,我也要运行一个文件。我该如何实现?我不想将代码放在app.py中。

2 个答案:

答案 0 :(得分:2)

一种解决方案是使用docker-entrypoint.sh脚本。基本上,该入口点将允许您定义一组命令以运行以初始化程序。

例如,我可以创建以下docker-entrypoint.sh:

#!/bin/bash
set -e
if [ "$1" = 'app' ]; then
   sh /run-my-other-file.sh
   exec python app.py
fi
exec "$@"

我会在我的Dockerfile中使用它:

FROM alpine
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["app"]

在线上有很多关于docker-entrypoints的文章和示例。您应该对其进行快速搜索,我相信您会找到许多著名的生产级容器使用的有趣示例。

答案 1 :(得分:0)

您可以尝试创建一个名为run.sh的bash文件并放入其中

app.py

尝试更改CMD

Dim filesToBeCopied as List(Of String)

For Each remoteFile in filesToBeCopied
   FileIO.FileSystem.CopyFile(remoteFile, GetLocalPath(remoteFile), FileIO.UIOption.AllDialogs, FileIO.UICancelOption.ThrowException)
Next

还要确保run.sh的可执行文件具有权限