programing

도커 컨테이너를 통한 데이터베이스 연결 문제

yoursource 2022. 12. 31. 18:37
반응형

도커 컨테이너를 통한 데이터베이스 연결 문제

도커를 통해 Symfony와 MariaDB와의 개발 환경을 구축했습니다.

bitman/symfony 이미지를 촬영했습니다.

 https://hub.docker.com/r/bitnami/symfony

이건 내 선착장이다야무지다

version: '2'

services:
  myapp:
    image: 'bitnami/symfony:1'
    ports:
      - '8000:8000'
    volumes:
      - '.:/app'
    environment:
      - SYMFONY_PROJECT_NAME=backend
      - MARIADB_PORT_NUMBER=3306
      - MARIADB_USER=root
    container_name: symfony_container
    depends_on:
      - mariadb
  mariadb:
    image: 'bitnami/mariadb:10.3'
    ports:
      - '3306:3306'
  environment:
    - ALLOW_EMPTY_PASSWORD=yes
    - MARIADB_USER=root
  container_name: mariadb_container

.env 파일의 중요한 행:

DATABASE_URL=mysql://root:@localhost:3306/

my intrin.yaml 파일:

doctrine:
  dbal:
      url: '%env(resolve:DATABASE_URL)%'
      server_version: '5.7'
  orm:
      auto_generate_proxy_classes: true
      naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
      auto_mapping: true
      mappings:
          App:
              is_bundle: false
              type: annotation
              dir: '%kernel.project_dir%/src/Entity'
              prefix: 'App\Entity'
              alias: App

이제 도커 컴포지업을 실행하면 두 컨테이너가 모두 시작되고 Symfony에 액세스할 수 있습니다.

단, 다음을 사용하여 엔티티를 작성하려고 하면:

php bin/console make:entity

다음의 4개의 에러가 표시됩니다.

An exception occurred in driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution 

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution  

PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution 

이상한 점은 dbeaver를 통해 MariaDB 데이터베이스에 문제없이 접근할 수 있다는 것입니다.Symfony 컨테이너가 MariaDB 컨테이너를 찾지 못한 것 같습니다.

symfony 버전 5.0.4를 사용하고 있습니다.

그 오류들이 어디서 발생하는지 아는 사람이 있다면 감사할 것이다.

DATABASE_URL=module://root:@localhost:3306/

도커라는 관점에서 보면localhost현재 실행 중인 컨테이너입니다.이는 사용자의 symfony 컨테이너에서 사용되므로 해당 컨테이너에서 db를 찾으려고 합니다.

고객님의docker-compose.yml파일, db 서비스의 이름은mariadb애플리케이션 기본 네트워크에 참여하는 컨테이너에서 다음과 같이 해결됩니다.

DATABASE_URL=mysql://root:@mariadb:3306/

주의: 연결이 수정되면 DB 사용자 설정과 관련하여 해결해야 할 다른 문제가 있을 수 있습니다.이 경우 db 이미지 설정 매뉴얼을 주의 깊게 검토하십시오.

@Zeitounator 솔루션에는 동의하지만 호스트에서는 실행 시
php bin/console doctrine:migration:migrate
다음 오류가 반환됩니다.
could not translate host name "mariadb" to address: Name or service not known/etc/hosts에서 add로 해결했습니다.
127.0.0.1 mariadb
호스트 및 컨테이너에서 작동합니다.

언급URL : https://stackoverflow.com/questions/60463329/database-connection-issue-through-docker-containers

반응형