Docker compose healthcheck использует переменные окружения - PullRequest
0 голосов
/ 04 марта 2019

Вот мои 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.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вам нужно использовать знак двойного доллара ($$), чтобы docker-compose не анализировать эти переменные среды.Также измените способ определения теста, поскольку я пытался заставить его работать, но я не мог без его изменения.Следующее должно работать как ожидалось:

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

docker ps результат: Up 35 seconds (healthy)

0 голосов
/ 04 марта 2019

Ваш YAML выглядит нормально, как вы вызываете переменные env?Убедитесь, что вы ссылаетесь на правильный объект.Как правило, из вашего приложения вы вызываете переменные, используя что-то вроде

process.env.MYSQL_USER

Вам также не нужны тире, мое предпочтение (для удобства чтения) будет иметь следующий синтаксис:

mysql:
  environment:
    MYSQL_ROOT_PASSWORD: password
    MYSQL_DATABASE: somedb
    MYSQL_USER: rstudio
    MYSQL_PASSWORD: password

Если вы пытаетесь сослаться на свою переменную env напрямую в конфигурации yaml (т.е. в своей команде tests), вам следует использовать ARGS , поскольку ваши переменные env, вероятно, не будут скомпилированыпока что.

РЕДАКТИРОВАТЬ - если вы хотите сослаться на объект внутри yaml, вы можете использовать self например:

test: ["CMD", "mysql", "--user=${self:services.mysql.environment.MYSQL_USER}", "--password=${self:services.mysql.environment.MYSQL_PASSWORD}", "-e", "'SHOW DATABASES;'"]
...