【问题标题】:Setting enviroment variable of the container through bash script is not working通过 bash 脚本设置容器的环境变量不起作用
【发布时间】:2022-01-15 11:30:57
【问题描述】:

我正在尝试通过 bash 脚本设置 docker 容器的环境变量。

CMD ["/bin/bash", "-c","source runservice.sh"]

runservice.sh

#!/usr/bin/env bash

export "foo"="bar"

现在,当我进入容器并执行 printenv 后,它没有设置环境变量。 但是如果我在容器内运行相同的命令,环境变量就会被设置。 使用 bash 脚本导出的正确方法是什么?

【问题讨论】:

  • 您实际上是如何启动容器的? (我希望带有 CMD 的容器立即退出。)如果可以的话,我更喜欢 Dockerfile ENV 指令(另见In a Dockerfile, How to update PATH environment variable?),或者入口点包装脚本。
  • 由于有一些限制,我不能使用 ENV 指令。 docker stack deploy 启动容器。
  • 我也尝试过使用 Entrypoint,但这也没有设置 env 变量。我错过了什么?
  • 运行一个shell,改变那个 shell的环境,然后那个shell退出。您无法通过运行其他命令来修改您的环境。
  • 感谢您的解释。实际上我正在尝试实现这一点:medium.com/@adrian.gheorghe.dev/… 如果您在容器入口点中读取最后一点,请为您设置的每个环境变量调用以下函数。 .如果我们不能修改 env 变量,那么容器入口点是什么?我有什么遗漏的吗?

标签: bash docker shell docker-compose sh


【解决方案1】:

它没有设置环境变量

它在CMD 构建阶段设置环境。当然,它对其他任何东西都没有影响 - 在 CMD 阶段运行的 shell 将退出。请参阅 dockerfile 文档。

使用 bash 脚本导出的正确方法是什么?

没有正确的方法。影响环境的正确方法是使用ENV

在使用入口点的上下文中有一种解决方法 - 您可以将入口点设置为首先获取变量的 shell(或自定义进程)。

ENTRYPOINT ["bash", "-c", "source runservice.sh && \"$@\"", "--"]

【讨论】:

  • 我尝试了 shell 的入口点,但我仍然无法设置环境
猜你喜欢
  • 1970-01-01
  • 2022-07-29
  • 2016-10-07
  • 1970-01-01
  • 2019-05-17
  • 2015-09-28
  • 2016-12-23
  • 1970-01-01
  • 2011-03-05
相关资源
最近更新 更多