laravel перенести db при загрузке контейнера mysql docker - PullRequest
0 голосов
/ 30 января 2020

При сборке контейнера mysql из docker -композиции, после завершения сборки mysql требуется несколько секунд, прежде чем он оживает. За это время у меня есть скрипт, который запускает миграцию laravel. Однако невозможно подключиться к mysql в течение нескольких секунд, так как он все еще подключается (точно не знаю, что он делает). Чтобы исправить это, я добавил в свой сценарий sleep 30, который делает паузу на 30 с, пока он ждет, пока контейнер mysql полностью не заработает.

Мне не нравится эта работа, поскольку она не решает проблему, Что если в следующий раз, когда я соберу контейнер, потребуется 31 с? тогда миграция laravel все равно не удалась бы.

Кто-нибудь сталкивался с такой проблемой при миграции контейнера базы данных fre sh (только что загрузился) mysql? какие-нибудь идеи, как я мог это исправить?

1 Ответ

1 голос
/ 30 января 2020

Я не совсем уверен в вашей конфигурации docker, но как пользователь linux я бы использовал netcat для проверки TCP-соединения. (В debian / ubuntu: apt install netcat)

Чтобы получить IP-адрес контейнера, вы можете использовать:

containerIP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id)

, а затем дождаться соединения с netcat

nc -w 45 -v $containerIP 3306 </dev/null

-w устанавливает желаемое время ожидания

Таким образом, вы можете запустить миграцию или сделать что-то еще, если она не удалась.

if [ $? -eq 0 ]; then
    echo "Run your migrate"
else
    echo "Unable to connect"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...