启动Docker容器时是否可以自动运行python脚本?
我附加到图片的命令是:
docker run -i -t --entrypoint /bin/bash myimage -s
有没有办法在启动时添加运行脚本的附加命令? 我不想使用Dockerfile,因为我使用的一些python模块来自私有repos,需要手动下载,所以Dockerfile不能完全构建我想要的图像。
答案 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
ENTRYPOINT
与CMD
相比似乎是导致混淆的常见原因。
以这种方式思考:
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