web-dev-qa-db-ja.com

Docker MYSQL '[2002]接続が拒否されました'

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

誰かが私を助けてくれませんか?お時間をいただきありがとうございます。

7
Frank Millc

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

データベースへのオーバーログインを使用する場合は、データベースサーバーでそれを作成し、選択した場所からのデータベースに適切な権限を付与する必要があります。

ここでの問題は、データベースサーバーに「mysql」(docker-composeファイルのサービス名)という名前を付けたことです。しかし、デフォルトでは、phpmyadminは「db」という名前のデータベースサーバーに接続しようとします。追加PMA_Host: mysql phpmyadminサービスの環境セクションでこの問題を解決します。


8
JL M

異なる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ホストから

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

Mysqlコマンドラインツールを使用してmysqlインスタンスに接続できました。これは私が使用したコマンドです-mysql -u root -p -h 127.0.0.1、および管理者パスワードの入力。それはあなたにとって十分な解決策ですか?

3
Yaron Idan

php fpmコンテナーをmysqlにリンクする必要があります。

1
edlerd

私の場合、私はmysqlを、ポートがホストMAC(3306:3306)。 127.0.0.1を使用して、phpmyadmin dockerコンテナーからこのデータベースに接続してみました。ただし、localhost Dockerコンテナーのphpmyadminが必要なmysqlを実行していないため、機能しません。

Dockerネットワークからホストに接続するには

docker.for.mac.Host.internal

Docker NetworkingDocker Compose Networking

0
joseph