这是我的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
如何使用环境变量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.
答案 0 :(得分:2)
您需要使用双美元符号($$
)来告诉docker-compose
不要解析这些环境变量。当我尝试使测试生效时,也要更改定义测试的方式,但是我不能不更改它。以下应该可以正常工作:
test: mysql --user=$$MYSQL_USER --password=$$MYSQL_PASSWORD -e 'SHOW DATABASES;'
docker ps
结果:Up 35 seconds (healthy)
答案 1 :(得分:0)
您的YAML看起来不错,如何调用环境变量?确保您引用的对象正确。通常,在您的应用程序中,您将使用
之类的变量来调用您的变量 process.env.MYSQL_USER
您也不需要破折号,我的偏好(出于可读性)将是以下语法:
mysql:
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: somedb
MYSQL_USER: rstudio
MYSQL_PASSWORD: password
如果您尝试直接在yaml配置中引用环境变量(即在测试命令中),则应使用ARGS,因为环境变量可能尚未编译。
编辑-如果要引用yaml中的对象,则可以使用self
,例如:
test: ["CMD", "mysql", "--user=${self:services.mysql.environment.MYSQL_USER}", "--password=${self:services.mysql.environment.MYSQL_PASSWORD}", "-e", "'SHOW DATABASES;'"]