私は初めて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]接続が拒否されました]は、データベースサーバーにアクセスできるが、ユーザー(あなたの場合は管理者)に適切なアクセス権がないことを意味します。デフォルトでは、mariadbにはMYSQL_ROOT_PASSWORDで指定されたパスワードを持つrootユーザーがあり、このユーザーは任意のサーバー(%)から接続できます。
データベースへのオーバーログインを使用する場合は、データベースサーバーでそれを作成し、選択した場所からのデータベースに適切な権限を付与する必要があります。
ここでの問題は、データベースサーバーに「mysql」(docker-composeファイルのサービス名)という名前を付けたことです。しかし、デフォルトでは、phpmyadminは「db」という名前のデータベースサーバーに接続しようとします。追加PMA_Host: mysql
phpmyadminサービスの環境セクションでこの問題を解決します。
異なる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)
Mysqlコマンドラインツールを使用してmysqlインスタンスに接続できました。これは私が使用したコマンドです-mysql -u root -p -h 127.0.0.1
、および管理者パスワードの入力。それはあなたにとって十分な解決策ですか?
php fpmコンテナーをmysqlにリンクする必要があります。
私の場合、私はmysql
を、ポートがホストMAC(3306:3306
)。 127.0.0.1を使用して、phpmyadmin
dockerコンテナーからこのデータベースに接続してみました。ただし、localhost
Dockerコンテナーのphpmyadmin
が必要なmysql
を実行していないため、機能しません。
Dockerネットワークからホストに接続するには
docker.for.mac.Host.internal