Docker 使用后备组合 .env 默认值

Docker compose .env default with fallback

我想在 git 存储库中保存一个 docker-compose.yaml 文件。 我想要一些默认的 .env 变量,但我也想要像 .env.local 这样可以覆盖 .env 的东西,但我不想提交 .env.local所以它应该被git忽略。

有什么方法可以告诉 docker-compose.yaml“如果存在则使用 .env.local,否则使用 .env”?

这个想法是允许某人克隆存储库,如果他们愿意,可以使用他们自己的 .env.local,而无需提交 git 更改或使用默认 .env 值(如果他们不这样做) '想自定义它。

如果您按名称使用 env 文件中的值,如下所示。您可以使用如图所示的 posix parameter expansion 来获取默认值行为。 Compose 将使用 .env 文件中的该变量的值,或者如果它在您的 shell 中设置,否则它将默认为 default-value.

services:
  myapp:
    environment:
      SOME_VALUE: ${SOME_VALUE:-default-value}

如果您打算在 env_file 键下使用它,您可以使用上面示例中的知识做一些技巧。

services:
  myapp:
    env_file: ${ENV_FILE:-.env.local}

现在默认使用.env.local。除非您碰巧将 .env 文件放在项目的根目录下(从您调用 compose 的地方)并覆盖其中的 ENV_FILE 变量。或者将其导出到您的 shell。请注意,.env 文件必须包含 ENV_FILE=.env 才能在 env_file:

中扩展为 .env
ENV_FILE=.env
OTHER_STUFF=foo