【问题标题】:How to set environment variables in a docker container after it startsdocker容器启动后如何设置环境变量
【发布时间】:2019-10-31 13:51:12
【问题描述】:

我需要在 docker 容器启动后设置一些环境变量。当 docker 启动 env X 获取值时,我想使用以下命令将 env Y 设置为值 X 的第一部分: Y=$(echo $X | cut -d'@' -f 1)

有什么办法吗?

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

【问题讨论】:

  • 也许 docker 镜像有一个在启动时运行的脚本。这是公开图片吗?
  • 你可以在Docker镜像中使用ENTRYPOINT ["do_something.sh"],在do_something.shbash脚本中执行Y=$(echo $X | cut -d'@' -f 1)
  • 我是用CMD做的,不知道CMD和ENTRYPOINT有什么区别。我意识到我需要使用“source”,所以命令将在当前的 shell 环境中执行。所以我添加了 CMD["source ./script.sh"] 但它不起作用。我不得不在 docker 映像中手动执行源代码,但我不想要它。

标签: docker environment-variables dockerfile


【解决方案1】:

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

ENV PORT 8080

来源和更多信息 - https://vsupalov.com/docker-build-time-env-values/

【讨论】:

  • “构建时间”是相关的。那是在它开始之前
  • 我需要在容器启动后设置那些环境变量,所以 ENV 不是解决方案。顺便谢谢。
【解决方案2】:

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

【讨论】:

  • 是的,我想我在正确的轨道上,但是问题仍然存在。 :D 显然,我需要使用“source ./script.sh”,因此命令将在当前 shell 环境中执行,但 CMD["source ./script.sh"] 不起作用。
  • 确实,您需要将您的 cmd 设置为设置环境变量的 bash 脚本,然后运行您的原始命令。
  • 我认为问题是当我的脚本被执行时,env X 仍然没有任何价值。我怎样才能等到 X 获得价值?
  • 如果你设置正确,它会在你的容器运行时出现。听起来你可能有不同的问题?
  • 我想我发现了问题,我正在使用的基础映像已经有一个入口点,据我所知,我们在 docker 中不能有多个入口点。我不知道该怎么办。
猜你喜欢
  • 2018-07-08
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
相关资源
最近更新 更多