Docker 通过传递 CMD 参数来执行多个命令

Docker 通过传递 CMD 参数来执行多个命令

我的docker开始运行后,我需要执行一些配置。

因此,我将所有设置放入./init.sh并设置ENTRYPOINT类似

ENTRYPOINT ["./init.sh"]

但是,我必须执行用户的其他命令。例如,

docker run -it name:tag pwd > a; pwd > b

上面的命令显然是行不通的!

然后,我就被困在这里了。如果我像上面那样传递命令,我相信ENTRYPOINT会变成

ENTRYPOINT ["./init.sh", "pwd", ">", "a", ";", "pwd", ">", "b"]

正确的?这是否意味着我必须解析以下所有参数并在 中执行init.sh?有没有更好或正确的方法来实现这一目标?

答案1

命令中的最终参数docker run作为参数传递给 ENTRYPOINT 中定义的命令。您可能想要的是一个指向这样的脚本的 ENTRYPOINT;

# Do theConfiguration 
...
# Run the user commands
sh -c "$*"

在简单的情况下,您可以将它与裸参数一起使用:

docker run name:tag pwd

对于更复杂的命令,您可以将所有内容放在引号中以避免被主机 shell 解析:

docker run name:tag "pwd > a; pwd > b"

但您必须考虑重定向输出的去向。如上代码所示,它最终出现在容器内的两个文件中,如果您想在容器外看到它,则必须安装卷。

相关内容