无法使用 Docker 容器中的 ENV 变量在 docker-compose 文件中执行 HEALTHCHECKS

Max*_*ent 3 environment-variables docker docker-compose

我有一个带有数据库服务的 docker-compose 文件,该文件获取用户和密码的环境文件(我删除了密码的 env 变量,因为用户和密码的问题是相同的):

db:
    restart: always
    container_name: db
    image: mariadb:10.3.9
    env_file:
      - my_env_file.env
    volumes:
      - /opt/dbdata:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysql", "-u", "${DB_USER}", "-e", "\"SHOW DATABASES;\""]
      interval: 1m
      timeout: 10s
      retries: 10
Run Code Online (Sandbox Code Playgroud)

环境文件有一个 DB_USER 条目:

DB_USER=TEST

使用 docker-compose 构建和启动容器时,Docker 无法解析环境变量,因为该变量仅存在于容器中db,并且我收到以下警告:

WARNING: The DB_USER variable is not set. Defaulting to a blank string.

有没有办法告诉 Docker 避免在主机上解析此环境变量的值,而是从我的容器中解析它?

出于安全原因,我不想在主机上提供环境变量。

我也不想使用,mysqladmin因为它可能会导致误报(例如,运行状况检查可能会失败,因为数据库尚未接受连接)。

Sha*_*k V 5

env_file选项只能用于设置容器内的环境变量。

要替换撰写文件中的变量,有两个选项-

  1. Shell 环境变量 - Compose 可以使用运行 docker-compose 的 shell 环境中的变量值。

  2. .envfile - Compose 支持在执行 docker-compose 命令的文件夹中名为 .env 的环境文件中声明默认环境变量。shell 中的环境变量将覆盖文件中的值.env


如果以上选项都不适合您,您可以尝试以下方法 -

  1. 运行 shell 脚本,在其中引用容器环境变量作为运行状况检查。

  2. 用双美元符号转义变量。

test: ["CMD-SHELL", "mysql -u $${DB_USER} -e \"SHOW DATABASES;\""]