在我的docker-compose文件中,我有一个前端,后端和数据库。 如果我启动docker-compose up后端在数据库完成之前启动,那么它们就会崩溃,因为后端无法连接到任何数据库。
server_backend:
build:
context: server_backend
ports:
- 8080:8080
links:
- database
depends_on:
- database
restart: unless-stopped
database:
image: mysql
ports:
- 3306:3306
我使用“depends_on:”但它没有帮助。
怎么说,后端应该在数据库之后创建?
答案 0 :(得分:0)
您需要:
在启动后端应用程序之前,将代码添加到等待数据库可用的后端映像,或者
向后端应用程序添加代码,如果失败,将重试数据库连接。
第一个选项是最简单的实现,而第二个选项更健壮(例如,如果您要重新启动数据库容器,它将允许您的后端应用程序继续)。
第一个选项的实现可能与以下shell脚本一样简单(修改为包含适当的连接凭据):
while ! mysql -h database -e 'select 1' mydatabase; do
sleep 1
done
这会反复尝试连接数据库并执行sql命令。它将循环,直到sql命令成功执行。例如,您可以将其放在后端映像中的ENTRYPOINT
脚本中(或作为应用程序启动脚本的一部分)。