1. 背景
以前は docker をインストールして MySQL コンテナを実行していました。また、docker で MySQL に接続してデータベースを作成するために navicat を使用していました。しばらく Windows を使用するのをやめて MacOS に切り替えました。その後、Windows コンピュータに戻って、navicat を見つけました。データベースに接続できません。エラーのスクリーンショットは次のとおりです。
(私の問題は解決したため、エラー画像が見つかりません。この画像はエラーを再現するために他の人の画像からコピーしたものです
)
2. 私は何を試しましたか?
- を使用してコンテナに入りますmysql -uroot -pMySQL へのログインは可能ですが、Docker MySQL への外部接続を使用することは不可能であることが判明したため、問題自体はコンテナ内にあるわけではないと推測されます。
- インターネット上で Baidu が提供するソリューションのほとんどは、コンソールを使用して MySQL にログインし、root ユーザーが % (すべての IP 接続が許可されている) であるかどうかを確認し、次に権限を構成し、パスワードを変更し、権限を更新します。問題を解決するために、もう一度試してみましたが、最終的な結果は確かに未解決でした。
- 次に、インターネットで、Docker マシンの IP を確認しようとしているのを見つけました (Windows が Linux をシミュレートしているため、WLS か何かと呼ばれるようで、それを Docker Desktop に提供して使用できるようにしました)。 Linux マシンは ifconfig を通じて IP をチェックし、navicat のこの IP として IP アドレスを入力しようとしますが、それでも機能しません。この頃にはもう汚い言葉でいっぱいになってしまいました~
- 後で信じられなかったので、ポート マッピングをもう一度確認したところ、確かに 3306 が外部 3306 にマッピングされていました。もう信じられませんでした。元の MySQL コンテナを閉じて、もう一度実行することはできませんか? それから、コマンドのセット (マウント ディレクトリは無視します):
docker run -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
この時、行ってみるとコンテナが実行できないことが分かり、びっくりしました~
エラーメッセージはおおよそ以下のようなものでした。
ポートが利用できません: ポート TCP 0.0.0.0:xxxxx を公開しています -> 0.0.0.0:0: listen tcp 0.0.0.0:xxxxx: バインド:アクセス許可で禁止されている方法で
ソケットにアクセスしようとしました。
次に、戻って元々閉じていたコンテナを起動しようとしましたが、起動できないことがわかりました。さて、百度はこの間違いを犯しました。
3.解決する
上記のポートが使用できない理由に基づいて、検索エンジンが見つけた解決策は次のとおりです。
winnatを再起動します
- 手順:
- PowerShell を管理者として実行する
- 勝者をやめる
net stop winnat
- winnatを開始する
net start winnat
その後、戻ってコンテナを実行したところ、コンテナは生きていました。
navicat で MySQL に接続したら、うまくいきました。
新しく作成したコンテナを削除して、これで終わりです。