나는 처음으로 Docker를 시험해 보았다. LEMP 스택이 실행 중이지만 MYSQL 데이터베이스에 연결할 수 없습니다. 내 Symfony 응용 프로그램이 아니라 PHPMyAdmin이 아닙니다. 응용 프로그램이 다음 오류 코드를 반환합니다.
드라이버에서 예외가 발생했습니다. SQLSTATE [HY000] [2002] 연결이 거부되었습니다.
이것은 내 docker-compose.yml입니다.
nginx:
image: tutum/nginx
ports:
- "80:80"
links:
- phpfpm
volumes:
- ./nginx/default:/etc/nginx/sites-available/default
- ./nginx/default:/etc/nginx/sites-enabled/default
- ./logs/nginx-error.log:/var/log/nginx/error.log
- ./logs/nginx-access.log:/var/log/nginx/access.log
phpfpm:
build: phpfpm/
ports:
- "9000:9000"
volumes:
- ./public:/usr/share/nginx/html
mysql:
image: mariadb
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: admin
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
links:
- mysql
ports:
- 8183:80
environment:
MYSQL_USERNAME: admin
MYSQL_ROOT_PASSWORD: admin
PMA_ARBITRARY: 1
Dockerfile PHP FPM :
FROM php:fpm
RUN docker-php-ext-enable opcache
RUN apt-get update && apt-get install -y --no-install-recommends libpq-dev && docker-php-ext-install mysqli pdo_pgsql pdo_mysql
누군가 나를 도울 수 있습니까? 시간 내 주셔서 감사합니다.
해결 방법
'[2002] 연결이 거부 됨'은 데이터베이스 서버에 연결할 수 있지만 사용자 (귀하의 경우 관리자)에 대한 권한이 없음을 의미합니다. 기본적으로 mariadb에는 MYSQL_ROOT_PASSWORD에서 제공 한 암호를 가진 루트 사용자가 있으며이 사용자는 모든 서버 (%)에서 연결할 수 있습니다.
데이터베이스에 대한 오버 로그인을 사용하려면 선택한 위치의 데이터베이스에 대한 권한을 부여하여 데이터베이스 서버에서 생성해야합니다.
여기서 문제는 데이터베이스 서버의 이름을 'mysql'(도커 작성 파일의 서비스 이름)으로 지정했다는 것입니다. 그러나 기본적으로 phpmyadmin은 'db'라는 데이터베이스 서버에 연결을 시도합니다. phpmyadmin 서비스의 환경 섹션에 PMA_HOST : mysql
을 추가하면이 문제가 해결됩니다.
<시간 /> 기본 구성으로 작업하면 MYSQL_USERNAME 및 PMA_ARBITRARY가 쓸모 없다고 생각합니다 (루트와 데이터베이스 서버 연결).
참조 페이지 https://stackoverflow.com/questions/40561433
'MySql' 카테고리의 다른 글
MySQL 'SQLSTATE [HY000] [2002] 메시지가있는'PDOException '호스트에 대한 경로가 없습니다. (0) | 2020.10.31 |
---|---|
MySQL의 datetime에 초 추가 (0) | 2020.10.31 |
MySQL 데이터베이스에 쓰는 동안 아포스트로피를 처리하는 방법 (0) | 2020.10.31 |
MySQL 하나의 쿼리에서 업데이트 및 선택 (0) | 2020.10.31 |
MySQL mysql-python 설치 오류 : -lssl에 대한 라이브러리를 찾을 수 없음 (0) | 2020.10.31 |
댓글