mysql - mysql docker容器启动时laravel迁移数据库
问题描述
从 docker-compose 构建 mysql 容器时,一旦构建完成,mysql 需要几秒钟才能激活。在此期间,我有一个运行 laravel 迁移的脚本。但是,由于它仍在连接(不确定它到底在做什么),所以几秒钟内无法连接到 mysql。为了解决这个问题,我在脚本中添加了 asleep 30
在等待 mysql 容器完全上线时暂停 30 秒。
我不喜欢这种解决方法,因为它并不能真正解决问题,如果下次我构建容器需要 31 秒怎么办?那么 laravel 迁移仍然会失败。
有没有人在迁移一个新的(刚刚启动的)mysql数据库容器时遇到这个问题?有什么想法可以解决这个问题吗?
解决方案
我不太确定您的 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
推荐阅读
- python - 3x3 noughts 和 crosss 并确定是否有赢家
- java - 分析/调试 java Swing 中触发的事件的最佳方法是什么
- python - 名称(变量名)未定义错误
- javascript - Vue Js条件关闭div标签
- python - Jupyter Notebook 内核在尝试调用 elasticsearch 时死亡
- python-3.x - 将 python 日期时间加载到 Google BigQuery 中
- macos - 在 Thunderbolt 驱动程序中绕过重新映射的目的是什么?
- javascript - 如何防止猫鼬插入 ObjectID 而不是嵌入它
- reactjs - 访问多个组件中的反应钩子函数和状态
- multithreading - 由 Cantaloupe-Melon 大学的科学家设计的 FastPath 锁定算法是否正确?