首页 > 解决方案 > Docker compose env 变量未替换

问题描述

我有这样的 docker-compose 设置

码头工人-compose.yml

version: '3.9'
services:
  busybox:
    image: busybox:latest
    environment:
      - DB_HOST=${DB_HOST}
    env_file:
      - test.properties

测试属性

DB_URL=jdbc://mysql://${DB_HOST}:app_db

.env

DB_HOST=localhost

当我运行 docker-compose config 命令时,输出是这样的,

services:
  busybox:
    environment:
      DB_HOST: localhost
      DB_URL: jdbc://mysql://:app_db
    image: busybox:latest
version: '3.9'

如您所见,环境变量 DB_HOST 在 .env 文件中定义为“localhost”,但该变量在环境变量“DB_HOST”中由 docker-compose 设置为“”,并显示为jdbc://mysql://:app_db. 但我想要这样的 DB_HOST 值DB_HOST: jdbc://mysql://localhost:app_db。我怎么能做到这一点?

我的 docker 和 docker-compose 版本看起来像这样

> docker -v
Docker version 20.10.5, build 55c4c88

> docker-compose version
docker-compose version 1.28.5, build c4eb3a1f
docker-py version: 4.4.4
CPython version: 3.9.0
OpenSSL version: OpenSSL 1.1.1h  22 Sep 2020

antonio-petricca建议的解决方法是有效的,但我想知道是否有人在运行 docker-compose 之前在不设置 env 变量的情况下解决了这个问题?这曾经在较早版本的 docker-compose 上工作,但随着一些更新,它停止工作。我不确定它在哪个 docker-compose 版本上损坏。

标签: dockerdocker-composeenvironment-variables

解决方案


前段时间我遇到了同样的问题,解决方法是:

#!/bin/bash

DB_HOST=localhost

DB_HOST=${DB_HOST} docker-compose # ... command arguments ...

您可以对其他变量重复相同的操作。

告诉我这是否适合你。

问候。


推荐阅读