Подождите, пока служба MySQL будет готова в Docker Compose, прежде чем создавать другие службы - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь использовать wait-for-it в моем docker-compose.yaml, чтобы дождаться готовности mysql перед созданием зависимых от него сервисов.Это мое docker-compose.yaml:

version: '3.5'

services:
  mysql:
    image: mysql:5.6
    ports:
      - "3307:3306"
    networks:
      - integration-tests
    environment:
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=mypassword
    entrypoint: ./wait-for-it.sh mysql:3306
networks:
  integration-tests:
    name: integration-tests

Я получаю эту ошибку при попытке запустить это с помощью docker-compose:

Запуск интеграции-tests_mysql_1 ... ошибка

ОШИБКА: для интеграции-tests_mysql_1 Невозможно запустить службу mysql: создание среды выполнения OCI не удалось: container_linux.go: 348: запуск процесса контейнера вызвал "exec: \" ./ wait-for-it.sh \ ": stat ./wait-for-it.sh: нет такого файла или каталога ": неизвестно

ОШИБКА: для mysql Невозможно запустить службу mysql: создание среды выполнения OCI не удалось: container_linux.go: 348: запуск процесса контейнера вызвал" exec: \ "./wait-for-it.sh \ ": stat ./wait-for-it.sh: нет такого файла или каталога": неизвестно ОШИБКА: обнаружены ошибки при запуске проекта.

Скрипт wait-for-it.sh находится на том же уровне, что и мой файл docker-compose.yaml, поэтому я не понимаю, почему он не найден.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вы можете управлять порядком запуска служб, используя опцию docker depen_on .

0 голосов
/ 10 октября 2018

Ваша проблема здесь в том, что вы пытаетесь выполнить что-то, что не является частью вашего образа.Вы говорите docker создать контейнер из mysql: 5.6, который не содержит wait-for-it.sh, а затем вы говорите ему запустить контейнер, запустив wait-for-it.sh.

Я бы порекомендовал вам создать свой собственный образ, содержащий следующее:

#Dockerfile
FROM mysql:5.6

COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh

Затем вы замените mysql:5.6 своим изображением, и вы сможете выполнить функцию wait-for-it.sh.Я также выполнил бы это через команду вместо точки входа как таковую:

#docker-compose.yml
...
mysql:
  image: yourmysql:5.6
  command:  bash -c "/wait-for-it.sh -t 0 mysql:3306"
...

Где -t 0 будет ожидать mysql без тайм-аута.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...