Docker-compose up不会在数据库后启动后端

时间:2018-01-09 21:02:51

标签: docker docker-compose

在我的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:”但它没有帮助。

怎么说,后端应该在数据库之后创建?

1 个答案:

答案 0 :(得分:0)

您需要:

  • 在启动后端应用程序之前,将代码添加到等待数据库可用的后端映像,或者

  • 向后端应用程序添加代码,如果失败,将重试数据库连接。

第一个选项是最简单的实现,而第二个选项更健壮(例如,如果您要重新启动数据库容器,它将允许您的后端应用程序继续)。

第一个选项的实现可能与以下shell脚本一样简单(修改为包含适当的连接凭据):

while ! mysql -h database -e 'select 1' mydatabase; do
    sleep 1
done

这会反复尝试连接数据库并执行sql命令。它将循环,直到sql命令成功执行。例如,您可以将其放在后端映像中的ENTRYPOINT脚本中(或作为应用程序启动脚本的一部分)。