我已经很长时间没有发布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}
...
答案 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版撰写文件的事情之一(有类似的事情)