Этот урок, который вы читали, неполон. Он не говорил вам, что вы должны дождаться инициализации БД, если хотите ее использовать.
Сразу после запуска контейнера базы данных с помощью команды run
вы должны проверить журналы этого контейнера и дождаться инициализации БД
процесс завершен
Вы можете сделать это с:
$ docker logs -f <container name>
Где container name
в вашем случае - mysql
. Когда вы увидите, что db инициализирован и DB запущен, просто отсоедините (ctrl + c) от журналов и продолжайте.
Ваша БД готова к использованию.
важное примечание с учетом вашего составного файла
Этот составной файл не будет работать, потому что другие службы, такие как bitpal
/ worker
, не ожидают инициализации службы БД.
Изначально загрузите скрипт wait-for-it.sh
, который позволит другим сервисам ждать вашей базы данных при использовании файла compose для настройки вашего приложения. Сценарий, созданный vishnubob, доступен здесь здесь , затем скопируйте его во все каталоги, где находятся ваши службы, требующие базы данных.
В этих же каталогах создайте docker-entrypoint.sh
файлы и напишите их так:
#!/bin/bash
set -e
sh -c './wait-for-it.sh mysql:3306 -t 30'
exec "$@"
Затем в ваш файл compose добавьте записи в каждый сервис, которому требуется БД (и где вы размещаете wait-for-it.sh
скрипт), который будет выполнять скрипт ожидания:
entrypoint: ["./docker-entrypoint.sh"]
Затем ваши службы будут ждать, пока БД не будет инициализирована и готова к приему соединений.
В правках я добавлю прямое дерево каталогов, чтобы вы могли более четко видеть, как эти файлы должны быть размещены.
Это один из единственно эффективных методов, поскольку depends_on
не ожидает инициализации службы db, как это четко указано в официальных документах.
редактирование с объяснением расположения файлов
root
- bitpal
+ *some service files*
+ wait-for-it.sh
+ docker-entrypoint.sh
- some_service_requiring_db
+ *some service files*
+ wait-for-it.sh
+ docker-entrypoint.sh
- docker-compose.yml
И ваш составной файл должен выглядеть так:
version: '2'
services:
# MySQL service definition
mysql:
# like you have
# some services
# Django web server
bitpal:
# ...
entrypoint: ["./docker-entrypoint.sh"]
# further declarations