【问题标题】:Can I pass all of my existing env vars to an image without declaring them indv?我可以将所有现有的环境变量传递给图像而不声明它们是 indv 吗?
【发布时间】:2018-10-03 15:49:36
【问题描述】:

目前我的运行命令是这样的...

docker run -e DB_URL=$DB_URL -e DB_PORT=$DB_PORT ... <image name>

这可行,但可扩展性不强。有没有办法将所有配置的环境变量传递给容器而不声明每个?

我使用的是 OSX,这些设置在 .bash_profile 中。

【问题讨论】:

  • 如何使用 shell 脚本收集所需的环境变量(set、grep、...)、构建运行命令字符串并启动它?
  • 当然,但这不是重点,我宁愿有一个不那么老套的解决方案。如果我添加环境变量并且不记得更新等会发生什么。
  • 使用 Docker Compose,您可以在 Compose 文件中指定环境变量,也可以指定包含所有环境变量的 env_file。我建议走这条路。
  • 对 env_file 的事情似乎已经像 env_file=~/.bash_profile 一样关闭了。但这可能是 Windows 或其他操作系统映像的问题。所以我想基本上只是复制所有环境变量(或至少除非被列入黑名单)

标签: docker docker-for-mac


【解决方案1】:

env &gt; envFile &amp;&amp; docker run --env-file=envFile alpine env

但是我不建议这样做,因为这会将不必要的信息传递给 docker 容器。 而且您应该使用撰写文件甚至是简单的脚本来仅传递实际需要的变量。 这甚至可能会弄乱容器内的外壳,例如提示和语言环境等。

【讨论】:

  • 马克给出的答案几乎相同,投了赞成票,因为它有效,但不是我正在寻找的干净解决方案......
【解决方案2】:

最终,最好的选择是明确列出您要传递的变量。它们的数量应该是有限的,它们不应该经常变化,而且这种解决方案更健壮、更安全。

请注意,您可以简化示例。如果你想传入一个带有当前值的已定义变量,只需命名变量而不是设置它:

docker run -e DB_URL -e DB_PORT ... <image name>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2016-01-10
    • 2022-01-23
    • 1970-01-01
    • 2011-09-18
    • 2022-06-17
    相关资源
    最近更新 更多