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因为它可能会导致误报(例如,运行状况检查可能会失败,因为数据库尚未接受连接)。
env_file选项只能用于设置容器内的环境变量。
要替换撰写文件中的变量,有两个选项-
Shell 环境变量 - Compose 可以使用运行 docker-compose 的 shell 环境中的变量值。
.envfile - Compose 支持在执行 docker-compose 命令的文件夹中名为 .env 的环境文件中声明默认环境变量。shell 中的环境变量将覆盖文件中的值.env。
如果以上选项都不适合您,您可以尝试以下方法 -
运行 shell 脚本,在其中引用容器环境变量作为运行状况检查。
test: ["CMD-SHELL", "mysql -u $${DB_USER} -e \"SHOW DATABASES;\""]
| 归档时间: |
|
| 查看次数: |
1875 次 |
| 最近记录: |