본문 바로가기
MySql

MySQL Docker MYSQL '[2002] 연결 거부 됨'

by 베이스 공부 2020. 10. 31.
반응형

나는 처음으로 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

 

 

반응형

댓글