如何在docker容器启动后设置环境变量

如何在docker容器启动后设置环境变量,docker,environment-variables,dockerfile,Docker,Environment Variables,Dockerfile,我需要在docker容器启动后设置一些环境变量。当docker启动env X get value时,我想使用一个值设置env Y,该值是值X的第一部分,使用以下命令: Y=$(回声$X |切割-d'@'-f 1) 有没有办法做到这一点 我在Dockerfile中尝试了ENTRYPOINT和CMD,但不起作用。 docker将部署在Kubernetes群集上,我也尝试在config.yaml文件中设置它们,但也不起作用。您可以在docker文件中使用ENV命令,如下所示: ENV PORT 808

我需要在docker容器启动后设置一些环境变量。当docker启动env X get value时,我想使用一个值设置env Y,该值是值X的第一部分,使用以下命令: Y=$(回声$X |切割-d'@'-f 1)

有没有办法做到这一点

我在Dockerfile中尝试了ENTRYPOINT和CMD,但不起作用。
docker将部署在Kubernetes群集上,我也尝试在config.yaml文件中设置它们,但也不起作用。

您可以在docker文件中使用ENV命令,如下所示:

ENV PORT 8080

Source and more info-

您正处在正确的轨道上,您必须通过CMD或ENTRYPOINT来处理此问题,因为您希望它是动态的,并且是从现有数据派生的。具体细节将取决于您的容器和用例。

也许docker映像有一个启动时运行的脚本。这是公共映像吗?您可以在Docker映像中使用
ENTRYPOINT[“do_something.sh”]
,并在
do_something.sh
bash脚本中执行
Y=$(echo$X | cut-d'@'-f 1)
?我使用了CMD,我不知道CMD和ENTRYPOINT有什么区别。我意识到我需要使用“source”,以便在当前shell环境中执行该命令。所以我添加了CMD[“source./script.sh”],但它不起作用。我不得不在docker映像中手动执行源代码,但我不想要它。“构建时间”是相关的。我需要在容器启动后设置这些env变量,所以env不是解决方案。顺便说一句,谢谢。是的,我想我的思路是对的,但问题仍然存在D显然,我需要使用“source./script.sh”以便在当前shell环境中执行命令,但是CMD[“source./script.sh”]不起作用。事实上,您需要将cmd设置为bash脚本,该脚本设置env var,然后运行原始命令。我认为问题在于,当执行我的脚本时,env X仍然没有值。我怎样才能等到X得到值?如果设置正确,它将在容器运行时立即出现。听起来你可能有不同的问题?我想我发现了问题,我使用的基本图像已经有一个入口点,我知道docker中不能有多个入口点。我不知道该怎么办。