ローカルホストからDockerネットワークで実行されているDockerコンテナに接続する方法
P粉418854048
2023-07-25 11:54:51
<p>次のように docker を使用して mysql docker コンテナを作成しました。</p>
<pre class="brush:php;toolbar:false;">バージョン: "3.3"
サービス:
データベースサーバー:
コンテナ名: データベース
画像: mysql:最新
建てる:
ドッカーファイル: ./Dockerfile
環境:
MYSQL_ROOT_PASSWORD: rootTest
MYSQL_USER: ソウマリヤ
MYSQL_PASSWORD: userTest
ポート:
- 「3031:3306」
ネットワーク:
- 内部
ボリューム:
- mysql:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
再起動: 停止しない限り
ネットワーク:
内部:
ドライバー:ブリッジ
ボリューム:
mysql:</pre>
<p>正しいパスワードを使用して localhost:3031 に接続していますが、次のエラーが表示されます:</p>
<pre class="lang-bash prettyprint-override"><code>ユーザー 'root'@'172.19.0.1' のアクセスが拒否されました (パスワードを使用: YES)
</code></pre>
<p>このエラーを修正するにはどうすればよいですか? 同じ内部ネットワーク内の他のコンテナもデータベースに接続できません。 </p><p>Dockerfile の内容をここに示します。</p><p><code></code></p>
<pre class="brush:php;toolbar:false;">ADD init.sql init.sql</pre>
<p>initの内容を渡しました。ここでの SQL:</p>
<pre class="brush:php;toolbar:false;">レビューが存在しない場合はデータベースを作成します。
ユーザーが存在しない場合はデータベースを作成します。
ベンダーが存在しない場合はデータベースを作成します。
レビューに関するすべての権限を付与します。* を 'soumalya'@'%' に付与します。
users.* にすべての権限を付与します。 'soumalya'@'%';
ベンダーにすべての権限を付与します。* を 'soumalya'@'%';</pre> に付与します。
<p>コンテナのログから、データベースが起動し、ポート 3306 での受信接続を待機していることがわかります。 </p>
@HansKillan が言ったように、データベースがすでに存在するときにパスワードを変更しました。変更されたパスワードは無視され、古いパスワードが使用されていました。ユーザーのパスワードを変更するには、docker exec <container_name>... SQL コマンドを使用して SQL コマンドを記述し、ユーザーのパスワードを手動で変更する必要がありました。その後、すべてがうまくいきました。あなたの場合、データベースに多くのデータが含まれていない場合は、ボリュームを削除してコンテナを再作成するだけで時間を短縮できます