IT

도커 작곡 라라벨은 데이터베이스가 로딩되기를 기다리는 방법은 무엇입니까?

itgroup 2023. 7. 22. 09:55
반응형

도커 작곡 라라벨은 데이터베이스가 로딩되기를 기다리는 방법은 무엇입니까?

저는 제 라라벨 애플리케이션에 대한 테스트를 설정하려고 합니다.
응용프로그램은 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

반응형