programing

Docker MYSQL '[2002] 연결 거부'

goodsources 2023. 9. 23. 22:32
반응형

Docker MYSQL '[2002] 연결 거부'

처음으로 도커를 시험해 봤어요LEMP 스택을 설치하고 실행하고 있지만 MYSQL 데이터베이스에 연결할 수 없습니다.Symphony 애플리케이션이나 PHPMyAdmin에도 없습니다.응용 프로그램에서 다음 오류 코드를 반환합니다.

드라이버에서 예외가 발생했습니다. SQLSTATE[HY000] [2002] 연결 거부됨

이것은 내 도커 작곡곡입니다.

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

도커 파일 PHPFPM:

    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

GitHub URL : https://github.com/MolengraafFrank/DockerSymfony

누가 좀 도와주시겠습니까?시간 내 주셔서 감사합니다.

IP 주소가 서로 다른 3개의 컨테이너를 실행하고 있기 때문에 이 문제가 발생했습니다.

db - 172.18.0.3 - container for MYSQL
app - 172.18.0.2 - container for Laravel app

그래서 Laravel .env 파일을 편집해서 고쳤습니다.

DB_CONNECTION=mysql
DB_HOST=172.18.0.3
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=username
...

컨테이너 IP 주소를 가져옵니다.도커 호스트로부터

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

업데이트: 최신 도커 버전의 경우, 서비스 이름에 따라 "mysql"(docker-compose.yml)을 사용합니다.

mysql:
  image: mariadb
  ports:
    - 3306:3306

다음을 시도해 볼 수 있습니다.

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=username

DB_HOST는 도커-compose.yml에 정의된 MySQL 서비스 이름입니다.

'[2002] Connection rejected'는 데이터베이스 서버에 연결할 수는 있지만 사용자(admin의 경우)에 대한 올바른 액세스 권한을 가지고 있지 않다는 것을 의미합니다.기본적으로 mariadb에는 MYSQL_ROOT_PASSWARD에서 지정한 암호를 가진 루트 사용자가 있으며 이 사용자는 모든 서버(%)에서 연결할 수 있습니다.

데이터베이스에 대한 오버로그인을 사용하려면, 선택한 위치에서 데이터베이스에 권한을 부여하는 데이터베이스 서버에 오버로그인을 작성해야 합니다.

여기서 문제는 데이터베이스 서버의 이름을 'mysql'(도커 합성 파일의 서비스 이름)로 지정했다는 것입니다.그러나 기본적으로 phpmyadmin은 'db'라는 데이터베이스 서버에 연결을 시도합니다.추가하기PMA_HOST: mysqlpphmyadmin 서비스의 환경 섹션에서 이 문제를 해결할 것입니다.


I think that MYSQL_USERNAME and PMA_ARBITRARY are useless if you work with default configuration (connection with root to your databases server)

mysql 명령줄 도구를 사용하여 mysql 인스턴스에 연결할 수 있었습니다. 사용한 명령어입니다 -mysql -u root -p -h 127.0.0.1, 관리자 비밀번호를 입력합니다.그것이 당신에게 충분한 해결책입니까?

내 경우엔 내가 달려왔었소mysql포트가 호스트 맥에 매핑된 도커 컨테이너(3306:3306)에서 이 데이터베이스에 연결을 시도했습니다.phpmyadmin127.0.0.1을 사용하는 도커 컨테이너. 하지만 그것은 작동하지 않을 것입니다. 왜냐하면localhost에서phpmyadmin도커 컨테이너에 필요한 컨테이너가 없습니다.mysql입니다.

도커 네트워크에서 호스트에 연결하려면 다음과 같이 하십시오.

docker.for.mac.host.internal

도커 네트워킹 도커 구성 네트워킹

예를 들어 포트 매핑에 문제가 있었습니다.

제 경우에는 그랬습니다.3307:3306, ㅇ3307오른쪽에서도 DB 인스턴스에 연결할 수 있었습니다.

당신의 접속이 왜 실패했는지 알고 싶다면, 당신은 당신의 단말기에 php를 사용할 수 있습니다.

DB::connection()->getPdo();

유감스럽게도 이것은 당신에게 오류의 일부만을 줄 뿐입니다.tinker를 종료한 다음 이 명령을 사용하면 데이터베이스 유형, 호스트, 포트, 광고 사용자와 같은 문제에 대한 더 많은 정보를 얻을 수 있습니다.

이것처럼 말이다.

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:3306' (61)

   Symfony\Component\Process\Exception\ProcessFailedException 

  The command "'mysql' '--host=127.0.0.1' '--port=3306' '--user=root' '--default-character-set=utf8mb4' 'laravel'" failed.

Exit Code: 1(General error)

Working directory: /Users/Dev/Documents/www/laravel_docker/src/addressAPI

Output:
================


Error Output:
================

  at vendor/symfony/process/Process.php:270
    266▕      */
    267▕     public function mustRun(callable $callback = null, array $env = []): self
    268▕     {
    269▕         if (0 !== $this->run($callback, $env)) {
  ➜ 270▕             throw new ProcessFailedException($this);
    271▕         }
    272▕ 
    273▕         return $this;
    274▕     }

      +14 vendor frames 
  15  artisan:37
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

이렇게 하면 무엇이 잘못되었는지에 대한 답을 얻을 수는 없지만, 적어도 구성이 왜 잘못되었는지는 이해할 수 있습니다.

phpfpm 컨테이너를 mysql에 연결해야 합니다.

DB_READ_HOST=db했습니다 해 줬습니다.

언급URL : https://stackoverflow.com/questions/40561433/docker-mysql-2002-connection-refused

반응형