1. ホーム
  2. php

[解決済み] Docker MYSQL '[2002] 接続が拒否されました'.

2022-02-18 16:43:46

質問

初めて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 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

どなたか助けていただけませんか?お手数ですが、よろしくお願いします。

どのように解決するのですか?

2002] Connection refused」は、データベースサーバーにアクセスはできるが、そのユーザー(あなたの場合は管理者)に適切なアクセス権がないことを意味します。デフォルトでは、mariadb は MYSQL_ROOT_PASSWORD で指定されたパスワードを持つ root ユーザを持ち、このユーザはどのサーバからも接続できます(%)。

データベースへのオーバーログインを使用する場合、データベースサーバーに、選択した場所のデータベースに対して正しい権限を与えるものを作成する必要があります。

ここで問題なのは、データベースサーバーの名前を 'mysql' (docker-compose ファイル内のサービス名) にしていることです。しかし、デフォルトではphpmyadminは'db'という名前のデータベースサーバーに接続しようとします。追加する PMA_HOST: mysql をphpmyadminサービスの環境セクションの下に置くことで、この問題を解決することができます。


MYSQL_USERNAME と PMA_ARBITRARY は、デフォルトの設定(データベースサーバへの root での接続)で動作する場合は、意味がないと思います。