我正在构建一个新的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"]