도커 작곡 라라벨은 데이터베이스가 로딩되기를 기다리는 방법은 무엇입니까?
저는 제 라라벨 애플리케이션에 대한 테스트를 설정하려고 합니다.
응용프로그램은 Docker composite로 실행합니다.
다음 명령으로 테스트를 시작하려고 할 때:
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 컨테이너의 로딩이 완료되기를 기다리지만, 저는 이것이 어떻게 이루어지는지 알 수 없었습니다.
편집 ----
내가 사용하는 비타미/라벨 도커 컨테이너에 다음과 같은 스크립트가 있습니다.wait_for_db()
데이터베이스를 기다리는 것 같습니다.
테스트를 시작할 때가 아니라 이 스크립트가 일반 모드로 실행되는 이유를 아직 알지 못했습니다.
공식 문서에 따르면 데이터베이스가 준비될 때까지 기다릴 수 없으며 데이터베이스가 시작될 때까지 기다릴 수 없습니다.
그러나 시작할 때는 컨테이너가 "준비"될 때까지(특정 응용프로그램에 대해 의미하는 것이 무엇이든) 기다리지 않고 실행될 때까지만 작성합니다.그럴 만한 이유가 있습니다. (...) 가장 좋은 해결책은 시작할 때와 연결이 끊길 때 모두 응용 프로그램 코드에서 이 검사를 수행하는 것입니다.
일반적인 경우와 테스트 사례 간의 앱 동작 차이는 테스트 로드 시간이 더 짧거나(데이터베이스 준비 시간이 더 적음) 다른 방식으로 테스트를 처리하는 연결 실패와 같은 다른 이유와 관련이 있을 수 있습니다(시간이 지난 후 다시 시도하지 않음).
편집
사용.docker-compose run
컨테이너의 진입점을 재정의합니다.따라서 원래 데이터베이스 초기화를 대기하기 위한 스크립트가 있더라도 실행되지 않습니다.
첫째, run에 의해 전달된 명령은 서비스 구성에 정의된 명령을 재정의합니다.예를 들어 웹 서비스 구성이 다음으로 시작되는 경우
bash
,그리고나서docker-compose run web python app.py
으로 덮어씁니다.python app.py
.
언급URL : https://stackoverflow.com/questions/59706448/docker-compose-laravel-how-to-wait-for-the-database-to-load
'IT' 카테고리의 다른 글
외부 "C"를 간단한 단어로 언제 사용합니까? (0) | 2023.07.22 |
---|---|
배열에 특정 문자열이 포함되어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.07.22 |
마이크로서비스 아키텍처에서 마이크로서비스 간에 Java 모델을 공유하는 방법 (0) | 2023.07.22 |
컴파일러는 함수 호출의 쉼표가 쉼표 연산자가 아님을 어떻게 알 수 있습니까? (0) | 2023.07.22 |
어레이의 첫 번째 요소를 가져오고 Aggregate를 사용하여 반환하시겠습니까? (0) | 2023.07.17 |