启动Docker容器时自动运行Python脚本

启动Docker容器时是否可以自动运行python脚本?

我附加到图像的命令是:

docker run -i -t --entrypoint /bin/bash myimage -s 

有没有办法添加一个额外的命令启动脚本运行脚本? 我不希望使用Dockerfile,因为我使用的一些Python模块是从私人回购,并需要手动下载,所以Dockerfile将不会完全build立我想要的图像。

事实上有。 只是不要使用 – --entrypoint 。 代替:

 docker run -it myimage /bin/bash -c /run.sh 

显然,这个假设图像本身在/run.sh位置包含一个简单的Bash脚本。

 #!/bin/bash command1 command2 command3 ... 

如果你不需要,你可以在正在运行的容器中安装当前文件夹并运行一个本地脚本:

 docker run -it -v $(pwd):/mnt myimage /bin/bash -c /mnt/run.sh 

ENTRYPOINTCMD似乎是造成混乱的常见原因。

这样想一想:

  • ENTRYPOINT是一种硬编码设置后无法更改的特定行为的方法。
  • CMD是提供要运行的命令的默认方式。

Docker容器可以设置为独立运行的应用程序运行。 如果你非常喜欢,你可以创build一个容器,接受命令行参数(例如一个文件),拉入,使用魔法并返回一个处理过的文件。 有些人使用它来设置不同configuration的构build环境,只需按需运行它们,而不是混淆主机。

但是,您的使用情况感觉乏味,因为您显然正在手动进行设置。 将下载凭据设置为环境variables会更容易,如下所示:

 docker run -d -e "DEEP=purple" -e "LED=zeppelin" myimage /bin/bash -c /run.sh 

然后,您可以使用脚本中的脚本作为占位符。 这样,你就能得到两全其美的好处。 为了增加安全性,你的run.sh应该在使用之后取消设置环境variables,如下所示:

 #!/bin/bash command1 command2 command3 ... unset DEEP unset LED