Taz*_*Taz 5 mysql environment-variables docker docker-compose
这是我的docker-compose.yml:
version: "3"
services:
mongodb:
image: mongo:4.1
volumes:
- ./mongodb_data:/data/db
container_name: mongodb
ports:
- 27017:27017
mysql:
image: mysql:5.7
#volumes:
#- ./mysql_data:/var/lib/mysql
container_name: mysqldb
ports:
- 3306:3306
- 33060:33060
expose:
- 3306
- 33060
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=somedb
- MYSQL_USER=rstudio
- MYSQL_PASSWORD=password
healthcheck:
test: ["CMD", "mysql", "--user=$MYSQL_USER", "--password=$MYSQL_PASSWORD", "-e", "'SHOW DATABASES;'"]
timeout: 5s
retries: 5
Run Code Online (Sandbox Code Playgroud)
如何使用环境变量MYSQL_USER和MYSQL_PASSWORD?在当前设置中,运行docker compose时收到以下警告:
WARNING: The MYSQL_USER variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_PASSWORD variable is not set. Defaulting to a blank string.
Run Code Online (Sandbox Code Playgroud)
您需要使用双美元符号($$)来指示docker-compose不要解析这些环境变量。当我尝试使测试生效时,也要更改定义测试的方式,但是我不能不更改它。以下应该可以正常工作:
test: mysql --user=$$MYSQL_USER --password=$$MYSQL_PASSWORD -e 'SHOW DATABASES;'
Run Code Online (Sandbox Code Playgroud)
docker ps 结果: Up 35 seconds (healthy)
您的 YAML 看起来不错,您如何调用环境变量?确保您引用了正确的对象。通常,您可以从应用程序中使用类似的方法调用变量
process.env.MYSQL_USER
您也不需要破折号,我的偏好(为了可读性)是这样的语法:
mysql:
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: somedb
MYSQL_USER: rstudio
MYSQL_PASSWORD: password
Run Code Online (Sandbox Code Playgroud)
如果您尝试直接在 yaml 配置中引用您的 env 变量(即在您的测试命令中),您应该使用ARGS,因为您的 env 变量可能尚未编译。
编辑 - 如果您想引用 yaml 中的对象,您可以使用self例如:
test: ["CMD", "mysql", "--user=${self:services.mysql.environment.MYSQL_USER}", "--password=${self:services.mysql.environment.MYSQL_PASSWORD}", "-e", "'SHOW DATABASES;'"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
983 次 |
| 最近记录: |