docker-compose.yml不会读取主机名的环境变量

时间:2020-01-16 16:10:25

标签: docker docker-compose environment-variables centos7

我已经很长时间没有发布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}"

如果我将上面的HOSTNAME替换为some-name,则会收到以下错误消息:

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.

知道为什么我会收到该错误以及如何进行故障排除和/或修复吗?非常感谢!

编辑1:修复了我的export中的错字

Edit2:这可能有助于解决问题:从yaml文件中删除ERROR部分可解决此问题。因此,在我的docker-compose.yml中,我只有:

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

2 个答案:

答案 0 :(得分:2)

要公开环境值,请使用=而不是:,将您的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.

答案 1 :(得分:0)

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

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