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

时间:2015-11-06 10:52:40

标签: python docker

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

我附加到图片的命令是:

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

有没有办法在启动时添加运行脚本的附加命令? 我不想使用Dockerfile,因为我使用的一些python模块来自私有repos,需要手动下载,所以Dockerfile不能完全构建我想要的图像。

1 个答案:

答案 0 :(得分:3)

事实上有。不要使用--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容器设置为作为自包含应用程序运行。如果你如此倾向,你可以创建一个接受命令行参数(例如一个文件)的一次性容器,将其拉入,运行他们的魔法并返回一个已处理的文件。有些人使用它来设置具有不同配置的构建环境,并且只需按需运行它们,而不是使主机混乱。

但是,您的使用场景感觉很乏味,因为您显然是手动进行设置。将下载凭据设置为environment variables会更容易,如下所示:

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

然后,您可以将脚本中的内容用作占位符。这样,您就可以获得两全其美的效果。为了增加安全性,您的run.sh应该在使用环境变量后取消设置,如下所示:

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