도커 컨테이너를 통한 데이터베이스 연결 문제
도커를 통해 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
'programing' 카테고리의 다른 글
InputStream을 UTF-8로 읽기 (0) | 2022.12.31 |
---|---|
데이터 속성이 존재하는지 확인할 수 있는 방법이 있나요? (0) | 2022.12.31 |
Panda Dataframe의 컬럼에서 NaN 값을 Zeroes로 대체하려면 어떻게 해야 합니까? (0) | 2022.12.21 |
HTTP 414 "Request URI too long" 오류를 해결하려면 어떻게 해야 하나요? (0) | 2022.12.21 |
Java 문자열에서 선행 및 후행 공백 제거 (0) | 2022.12.21 |