将docker映像配置为可执行文件

将docker映像配置为可执行文件,docker,dockerfile,Docker,Dockerfile,我有一个docker图像myapp:1.0 在mydocker文件中,我有一行CMD来指定映像的主要功能(即运行django应用程序) 我想知道的是,是否有一种方法可以在docker run调用期间传递参数并执行图像,然后根据参数执行不同的命令 例如: CMD[{“run1”:“run_script_a.sh”},{“run2”:“run_script_b.sh”}] 所以我可以像这样运行docker映像: docker run myapp:1.0 run1#将执行run_脚本_a.sh doc

我有一个docker图像
myapp:1.0

在mydocker文件中,我有一行
CMD
来指定映像的主要功能(即运行django应用程序)
我想知道的是,是否有一种方法可以在
docker run
调用期间传递参数并执行图像,然后根据参数执行不同的命令
例如:
CMD[{“run1”:“run_script_a.sh”},{“run2”:“run_script_b.sh”}]

所以我可以像这样运行docker映像:
docker run myapp:1.0 run1
#将执行run_脚本_a.sh

docker run myapp:1.0 run2将执行run_脚本。sh

不要忘记,添加到docker run的任何参数都会自动覆盖图像中定义的

docker run myimage run_script_b.sh
这将运行
run_script_b.sh
,即使
CMD
已定义
run_script_a.sh

(前提是was
[“/bin/sh”、“-c”]


也就是说,您可以尝试从同一Dockerfile构建两个不同的映像,使用
--build arg
设置构建时间变量:

docker build --build-arg RUN=run_script_a.sh ... --name run1 .
docker build --build-arg RUN=run_script_b.sh ... --name run2 .
使用Dockerfile,包括:

CMD[ $RUN ]
如果CMD位于Dockerfile的末尾,那么这两个映像(而不是一个映像)的磁盘空间开销将是最小的


唯一的优点是运行run1或run2映像时不必传递任何消息:它们将启动各自的脚本。

您可以向docker run添加环境变量。然后,您可以使用一个通用的run_script.sh,它基于该变量启动特殊脚本,例如:

docker run -e "script=a" myimage

谢谢!我担心简单的答案是否定的。我已经在bash脚本中使用了docker运行命令覆盖选项,但我希望有一个更优雅的解决方案。