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