【问题标题】:docker-compose.yml won't read environment variable for hostnamedocker-compose.yml 不会读取主机名的环境变量
【发布时间】:2020-01-16 16:10:25
【问题描述】:

好久没在SO上发帖了,希望没有违反规定。

我的~/.bash_profile 中有一个环境变量导出如下,我确保运行source ~/.bash_profile

export HOSTNAME=some-name

这就是我的docker-compose.yml 的样子:

version: '3'

services:
    someservice:
        build:
            context: .
            dockerfile: ./Dockerfile
        image: ...
        container_name: ...
        restart: unless-stopped
        hostname: "someservice.${HOSTNAME:?Error: env var HOSTNAME is not defined or is empty}"
        ...

如果我运行docker-compose up -d,我会得到以下错误:

ERROR: Invalid interpolation format for "hostname" option in service "some-service":
 "someservice.${HOSTNAME:?Error: env var HOSTNAME is not defined or is empty}"

如果我用some-name替换上面的HOSTNAME,我会得到以下错误:

Starting someservice ... error

ERROR: for someservice  Cannot start service: OCI runtime create failed: 
container_linux.go:346: starting container process caused "process_linux.go:449: 
container init caused \"sethostname: invalid argument\"": unknown

ERROR: Encountered errors while bringing up the project.

知道我收到错误的原因以及如何排除和/或修复它吗?太感谢了!

Edit1:修正了我的 export 中的错字

Edit2:这可能有助于故障排除:从 yaml 文件中删除 ERROR 部分解决了该问题。所以,在我的docker-compose.yml 中,我只有:

...
   hostname: "someservice.${HOSTNAME} 
...

【问题讨论】:

标签: docker docker-compose environment-variables centos7


【解决方案1】:

要公开我们使用 = 而不是 : 的环境值,请将您的 bash 配置文件更改为 export HOSTNAME=some-name

根据文档,不支持其他扩展的 shell 样式功能,例如 ${VARIABLE/foo/bar}。见https://docs.docker.com/compose/compose-file/。您可能只需要使用"${HOSTNAME:?Error: env var HOSTNAME is not defined or is empty}" 而不使用someservice.

【讨论】:

  • 非常感谢您的评论。不幸的是,我打错了我的问题。我实际上有export HOSTNAME=some-name
【解决方案2】:

如果您将撰写文件的版本设置为“2.1”,它是否有效?这是一项诊断检查,以确认文档说明了我的想法,因此如果您必须注释/更改其他行以避免使用 3.x 功能,目前还可以。

撰写文件文档表明:?扩展适用于撰写文件版本 2.1,我想知道这是否是未移植到版本 3 撰写文件的事情之一(有一些类似的事情)

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 2020-07-16
    • 2016-07-16
    • 2015-04-02
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多