docker compose:CMD变量替换



我正在构建一个新的Docker映像,但我的带有变量替换的CMD命令不起作用。

我知道我需要用-c打开解释器,如下所示:

CMD ["sh", "-c", "hello.sh $VARIABLE"]

但我的用例不同,因为我需要用sudo:执行一些东西

CMD ["sudo", "-u", "oracle", "$ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/startWebLogic.sh"]

此操作正常:

CMD $ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/startWebLogic.sh

如何使其与sudo协同工作?

尝试:

CMD ["sudo", "-E", "-u", "oracle", "sh", "-c", ""$ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/startWebLogic.sh""]

默认情况下,sudo启动一个新环境。要使sudo保留环境,您需要传递-E选项。

然后要使$variables展开,您需要在shell下运行它,这样它们才能展开。但为了防止分词外壳扩展,我认为你必须引用变量扩展,从而引用额外的"

也许这会更容易,也有效:

CMD ["sh", "-c", "sudo -u oracle "$ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/startWebLogic.sh""]

但在docker中,我认为最好只设置用户:

USER oracle
CMD $ORACLE_HOME/user_projects/domains/$DOMAIN_NAME/startWebLogic.sh

这是一样的,只是前面有sudo

CMD ["sudo", "-u", "oracle", "sh", "-c", "hello.sh $VARIABLE"]

最新更新