Проблема в @
в пароле.Вам нужно экранировать его в docker-compose.yml. Python использует пароль с @ 123, в то время как compose обрабатывает его по-разному, и, следовательно, это не тот пароль, который вы установили для mysql.
Проверьте переменную env вКонтейнер, чтобы получить то, что составить, на самом деле установить его в качестве пароля.
Для справки см .:
https://symfony.com/doc/current/components/yaml/yaml_format.html:
Строки, содержащие любой из следующих символов, должны быть заключены в кавычки.Хотя вы можете использовать двойные кавычки, для этих символов удобнее использовать одинарные кавычки, что исключает необходимость экранирования от обратной косой черты:
:, {,}, [,], ,, &, *, #,?, |, -, <,>, =,!,%, @, `
http://yaml.org/spec/1.2/spec.html#id2772075:
« @ »(# x40, в) и «` »(# x60, серьезный акцент) зарезервированы для будущего использования.
Возможно также возможно, но менее вероятно :
Это происходит потому, что в тот момент, когда служба web
выполняет команду python, mysqldb в службе db еще не настроен.
См. Readme для mysql (https://hub.docker.com/_/mysql/):
Нет соединенийдо тех пор, пока инициализация MySQL не завершится
Если при запуске контейнера база данных не инициализирована, будет создана база данных по умолчанию. Хотя это ожидаемое поведение, это означает, что он не будет принимать входящие соединения, пока такая инициализация не завершится.Это может вызвать проблемы при использовании инструментов автоматизации, таких как docker-compose, которые запускают несколькоодновременно контейнеры.
Попробуйте запустить службу db (docker-compose up db) и подождите несколько секунд, а затем попробуйте запустить веб-службу.
Только директива depends_on
ожидает запуска контейнера - docker не знает, когда служба внутри контейнера будет «готова» - разработчик должен реализовать это самостоятельно.Обычно вы просто настраиваете веб-контейнер так, чтобы он запускался снова и снова, пока он, наконец, не преуспеет (БД будет готова).
Также, хотя и менее рекомендуется, просто дать sleep 10
перед выполнением миграции.сценарий.