mysql - Docker compose healthcheck 使用环境变量
问题描述
这是我的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.
解决方案
您需要使用双美元符号 ( $$
) 来告知docker-compose
不要解析这些环境变量。当我试图让它工作时,也改变定义测试的方式,但我不能不改变它。以下应该按预期工作:
test: mysql --user=$$MYSQL_USER --password=$$MYSQL_PASSWORD -e 'SHOW DATABASES;'
docker ps
结果:Up 35 seconds (healthy)
推荐阅读
- spring-boot - 使用 RestController 的 Spring Boot 视图日志
- binary-search-tree - 从后序遍历构造 BST。我的方法不正确吗?
- python-3.x - 如何根据应用于一个列表的排序对多个 Python 列表进行排序?
- html - 为什么我的元素的原点不在它的中心,我该如何设置它?
- path - 空手道模拟服务器 - 匹配请求正文,其中包含请求中的特定字符串
- c++ - Is there any performance penalty for using std::stack rather than the underlying std::deque?
- excel - 读取选择,将其加载到数组,处理并将其打印到下一列
- here-api - 如何在路由 V8 中使用 Fleet Telematics
- python - 使用easyocr从pdf中提取字段级数据
- typescript - Typescript 分配条件类型之间的赋值失败