【发布时间】:2020-01-12 17:36:52
【问题描述】:
我正在尝试为我的 Laravel 应用程序设置测试。
该应用程序使用 Docker compose 运行。
当我尝试使用此命令开始测试时:
docker-compose -p tests --env-file .env_tests --rm run myapp ./vendor/bin/phpunit
测试在数据库容器准备好之前开始运行。
如何让我的测试等待数据库准备就绪?
我的docker-compose.yml 看起来像这样:
version: '2'
services:
mariadb:
image: 'bitnami/mariadb:10.1'
environment:
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_USER=my_user
- MARIADB_DATABASE=my_database
- MARIADB_PASSWORD=my_password
ports:
# connect your dbeaver/workbench to localhost:${WORKBENCH_PORT}
- ${WORKBENCH_PORT}:3306
# volumes:
# Do not load databases here, as there is no
# good way for other containers to wait for this to finish
# - ./database:/docker-entrypoint-initdb.d
myapp:
tty: true
image: bitnami/laravel:6-debian-9
environment:
- DB_HOST=mariadb
- DB_USERNAME=my_user
- DB_DATABASE=my_database
- DB_PASSWORD=my_password
depends_on:
- mariadb
ports:
- 3000:3000
volumes:
- ./:/app
当我正常启动应用程序时(docker-compose up),Laravel 等待 mariadb 容器完成加载,但我不知道这是如何完成的。
---- 编辑 ----
我发现我使用的 bitami/laravel Docker 容器有一个名为 wait_for_db() 的脚本,它似乎在等待数据库。
我还没有发现为什么这个脚本在正常模式下运行,但在我开始测试时却没有。
【问题讨论】:
标签: laravel docker-compose mariadb