首页 > 解决方案 > mysql docker容器启动时laravel迁移数据库

问题描述

从 docker-compose 构建 mysql 容器时,一旦构建完成,mysql 需要几秒钟才能激活。在此期间,我有一个运行 laravel 迁移的脚本。但是,由于它仍在连接(不确定它到底在做什么),所以几秒钟内无法连接到 mysql。为了解决这个问题,我在脚本中添加了 asleep 30在等待 mysql 容器完全上线时暂停 30 秒。

我不喜欢这种解决方法,因为它并不能真正解决问题,如果下次我构建容器需要 31 秒怎么办?那么 laravel 迁移仍然会失败。

有没有人在迁移一个新的(刚刚启动的)mysql数据库容器时遇到这个问题?有什么想法可以解决这个问题吗?

标签: mysqldockercontainers

解决方案


我不太确定您的 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

推荐阅读