无法在docker-compose.yaml中为端口声明插值环境变量求助
问题
在docker-compose.yaml的端口声明中使用环境变量${DATA_BASE_PORT}插值失败,已确认env_file路径正确(路径错误会触发exit code 14的文件找不到错误),相关配置如下:
docker-compose.yaml
version: "3" services: Database: image: postgres container_name: Database restart: always ports: - "${DATA_BASE_PORT}:${DATA_BASE_PORT}" env_file: - 01-Source/Infrastructure/Interactions/ClientAndFrontServer/.env.dataBase.local.public - 01-Source/Infrastructure/Interactions/ClientAndFrontServer/.env.dataBase.local.private # ...
.env.dataBase.local.public 文件内容
DATA_BASE_HOST=localhost DATA_BASE_PORT=5432
运行时出现错误:
Ttime="2022-10-23T10:51:41+09:00" level=warning msg="The \"v\" variable is not set. Defaulting to a blank string." 1 error(s) decoding: * error decoding 'Ports': No port specified: :<empty> `docker-compose` process finished with exit code 15
请求排查环境变量无法插值的问题。
排查与解决
env_file作用范围限制:
docker-compose.yaml中env_file定义的变量仅作用于容器内部进程,无法用于docker-compose自身的配置插值(比如ports、volumes这类顶层配置项)。要让变量用于docker-compose配置插值,可采用以下方式:- 在宿主机终端先导出变量:
export DATA_BASE_PORT=5432,再执行docker-compose命令 - 执行命令时指定用于插值的env文件:
docker-compose --env-file 01-Source/Infrastructure/Interactions/ClientAndFrontServer/.env.dataBase.local.public up - 在项目根目录创建
.env文件,docker-compose会自动加载该文件变量用于配置插值
- 在宿主机终端先导出变量:
yaml语法修正:原配置中的
// ...是错误的yaml注释格式,需改为# ...,虽然不一定直接导致变量插值失败,但可能引发yaml解析异常,影响整体配置读取变量名拼写校验:再次确认所有位置的变量名完全一致,避免大小写、下划线等拼写差异
内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD
相关产品推荐
相关产品推荐

