【问题标题】:Docker-compose error with service env_file服务 env_file 的 Docker-compose 错误
【发布时间】:2017-06-09 18:58:39
【问题描述】:

我一直致力于通过 .env 文件将我的敏感数据(凭据)传递给 docker 容器。我正在使用 docker-compose,我的 docker-compose.yml 文件如下所示:

 services:
   some-service:
     env_file:
       - .env

但是当我尝试执行“docker-compose up”时,出现以下错误:

 ERROR: In file './docker-compose.yml', service 'env_file' must be a mapping not an array.

我的 .env 文件有类似的数据

id = 1234567890

密码 = 我的密码

我的文件中是否有任何缩进错误?有关如何修复此错误的任何建议?

【问题讨论】:

    标签: docker environment-variables docker-compose dockerfile


    【解决方案1】:

    看起来这是您的 YAML 结构的问题。它可能是您的 - .env 之前缺少的空格或缺少的服务名称。试试这个:

    services:
      some-service:
        env_file:
          - .env
    

    如果只使用一个环境文件,也可以这样写:

    services:
      some-service:
        env_file: .env
    

    见:https://docs.docker.com/compose/compose-file/#env_file

    【讨论】:

    • 某些服务的有效值是什么?我使用了“环境”,现在它给了我以下错误。错误:Compose 文件 './docker-compose.yml' 无效,因为:services.environment.env_file 包含 ["a.env"],这是一个无效类型,它应该是字符串、数字或 null
    • 对此不确定。尽管这可能不是问题,但我不会将服务称为“环境”,这是 docker-compose 中的保留关键字吗?您可以将其命名为任何有意义的名称来识别您的服务,它只是一个名称。你能展示你的新配置吗?我看不出 ["a.env"] 中的这个字母 'a' 来自哪里。
    • 对不起。 a.env 中的“a”出现了,因为后来我将 .env 文件名更改为 a.env 只是为了探索是否是问题所在。但似乎文件名与错误无关。
    • 看不出我的建议有什么问题。它看起来就像在文档中一样。因此,能否请您显示您当前的配置和整个错误?顺便说一句,您的 .env 文件的内容也可能有问题,因为该方案需要是这样的:VAR=hello(请参阅我的答案中链接的文档中的更多信息)。
    • 尝试使用完整路径。
    【解决方案2】:
    ERROR: In file './docker-compose.yml', service 'env_file' must be a mapping not an array.
    

    错误表明 docker-compose 认为 env_file 是您的服务名称,而不是服务的设置。这表明您没有正确地将env_file 部分缩进到服务中。 YML 语法对空格敏感,因此请仔细检查行上的缩进。如果您在缩进中找不到错误,请在您的问题中包含完整的 docker-compose.yml 文件,缩进与您的文件中完全相同,以便我们进一步提供帮助。

    【讨论】:

    • 感谢您的回复。我已经发布了我的答案-请参考
    【解决方案3】:

    问题不在于缩进。似乎它现在正在工作。我实际上不得不提到版本和构建路径(它们在我的初始 yml 文件中丢失)。所以最终的 docker-compose 文件如下所示:

    version: '3'
    services:
      some-service:
        build: .
        env_file:
          - .env
    

    或者,如果您愿意,您可以将其与特定图像名称相关联:

    version: '3'
    services:
      some-service:
        build: .
        image: image_name:image_version
        env_file:
          - .env
    

    希望对遇到同样问题的人有所帮助

    【讨论】:

    • 不包括版本(您的问题最初包含的版本)会将您更改为缩进级别不正确的 v1 语法。
    • @BMitch 好的。那么,如果你不提任何,默认版本是 1?
    • 是的。版本 1 的语法只是服务,所有内容都缩进了一个级别。
    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2021-03-29
    • 1970-01-01
    • 2020-07-03
    • 2020-10-19
    • 1970-01-01
    相关资源
    最近更新 更多