首页 > 解决方案 > 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_USERMYSQL_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.

标签: mysqldockerdocker-composeenvironment-variables

解决方案


您需要使用双美元符号 ( $$) 来告知docker-compose不要解析这些环境变量。当我试图让它工作时,也改变定义测试的方式,但我不能不改变它。以下应该按预期工作:

test: mysql --user=$$MYSQL_USER --password=$$MYSQL_PASSWORD -e 'SHOW DATABASES;'

docker ps结果:Up 35 seconds (healthy)


推荐阅读