docker 内から 127.0.0.1 経由でホストにアクセスするとエラーが発生します。接続が拒否されました
2022-03-03 17:54:24
背景
dockerを通してmongodbを起動し、ポート27017をリッスンしています。アプリケーションを直接(dockerなしで)起動すると、mongodbに普通にアクセスできますが、docker経由ではアクセスできません。アクセスURLは、mongodb://127.0.0.1:27017 または mongodb:// localhost:27017 です。
2019-04-18 06:05:52.694 [cluster-ClusterId{value='5cb813be26261e30fc3db87f', description='null'}-127.0.0.1:27017] DEBUG org.mongodb. driver.cluster - Updating cluster description to {type=UNKNOWN, servers=[{address=127.0.0.1:27017, type=UNKNOWN, state=CONNECTING, exception = {com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused}}]
原因分析
dockerは仮想環境であり、127.0.0.1やlocalhostは外部ホストではなく仮想環境内部を指すため、この方法ではアクセスできない。
解決方法
- MacとWindowsの場合、127.0.0.1の代わりにhost.docker.internalを使用します(例: mongodb://host.docker.internal:27017
- Linuxの場合、以下のスキームが使えます(上記のスキームも使えるはずですが、現在のDockerはまだ修正されていません)。 この問題 ):
-
ブリッジネットワークの作成
以下のlocalNetはネットワークの名前ですが、変更可能です。192.168.0.0サブネットについては、自分で定義することも可能です。
デフォルトでは、192.168.0.1を通してホストにアクセスするために、以下のコマンドが実行されます。docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 localNet
- 127.0.0.1 を 192.168.0.1 に置き換えてください(例: mongodb://192.168.0.1:27017
付録
参考
Dockerコンテナの内部から、マシンのローカルホストに接続するにはどうすればよいですか?
Docker Tip #35: Dockerホストで動作しているデータベースに接続する
私について
厦門大学コンピューターサイエンス学科|元華為技術者
プログラミングのテクニックを共有し、深くはないが、理解しやすく、初心者に適している。
Java|Android|フロントエンド|スモールアプリ|ホンメン
公開します。
ピーナツスキンプログラミング
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例