Согласно официальной документации docker-compose , depends_on
означает, что этот сервис зависит от другого и не может работать без него, но это не означает, что другой сервис готов обрабатывать запросы.
Итак, когда вы запускаете развертывание, docker-compose гарантирует, что при запуске службы web
, db
также работает (если вы попытаетесь уничтожить контейнер db
, вы заметите,в докере составьте логи, которые web
тоже будут убиты).Поскольку образу MySQL требуется время для начальной загрузки, это приводит к тому, что база данных не может мгновенно обрабатывать запросы.
Для решения этой проблемы в docker-compose есть ключевое слово restart
, которое указываетповедение вашего контейнера, когда что-то идет не так и ваш процесс умирает (например, если у вас нет db
готового к обработке запросов).
В заключение ваш файл docker-compose.yaml
должен иметь следующий вид:
version: '2'
services:
db:
image: mysql:latest
volumes:
- ./db:/var/lib/mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_USER: root
MYSQL_PASSWORD: mypassword
MYSQL_DATABASE: django
expose:
- "3306"
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
restart: always
ports:
- "8000:8000"
depends_on:
- db
Подробнее о ключевом слове restart можно узнать в официальной документации