Dockerでローカルマシン(ホストマシン)にアクセスする方法

Dockerでローカルマシン(ホストマシン)にアクセスする方法

質問

Docker でローカル データベースにアクセスするにはどうすればよいでしょうか? 127.0.0.1 は Docker コンテナ内のコンテナ自体を参照するため、使用は絶対にできません。したがって、他のチャネルを通じて問題を解決する必要があります。

解決

オペレーティングシステムの種類に応じて、次のいずれかの方法を選択できます。

Dockerファイル:

/sbin/ip route|awk '/default/ { print $3,"\tdockerhost" }' を実行 >> /etc/hosts

ランタイム:

(使用しない場合があります) docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print $3}'` [私のコンテナ]
(便利) docker run --add-host=dockerhost:`docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge` [画像]

Docker for Mac (17.12+):

docker.for.mac.ホスト内部
MONGO_SERVER = docker.for.mac.host.internal

#docker-compose.yml
バージョン: '3'

サービス:
 API:
  ビルド: ./api
  ボリューム:
   - ./api:/usr/src/app:ro
  ポート:
   - 「8000」
  環境:
   - モンゴサーバー
  コマンド: /usr/local/bin/gunicorn -c /usr/src/app/gunicorn_config.py -w 1 -b :8000 wsgi

リナックス

解決策1
/sbin/ip route|awk '/default/ { print $3 }'
docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print $3}'` [私のコンテナ]
# 解決策 2
-e "DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')"

原理

原理を理解するには、コンピュータ ネットワークのモデルと Docker によって実装されるモデルを理解する必要があります。実際、Docker 内には仮想ブリッジ docker0 が実装されています。コンテナ内の外部ホストにアクセスするには、ブリッジ内の外部ホストの仮想アドレス、つまり docker.for.mac.host.internal が必要です。興味があれば、Docker のネットワーク原則、コンピュータ ネットワーク原則、および docker compose について学習できます。

参照

[1].(stackoverflow)dockerの親ホストのIPをコンテナのホストファイルに挿入する

[2].(stackoverflow)dockerコンテナ内からdockerホストのIPアドレスを取得する方法

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker でリモートの安全なアクセスを有効にする方法の詳細なグラフィック チュートリアル
  • DockerにTomcatコンテナを追加したときにホームページにアクセスできない問題の解決方法
  • 独立した IP を介して Windows コンテナ イントラネットの Docker に直接アクセスする方法
  • Centos Docker ブリッジ モードでホスト Redis サービスにアクセスできないというトラブルシューティングの経験
  • Dockerを使用して外部からアクセス可能なMySQLを構築する詳細な説明
  • dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明
  • Dockerコンテナを使用してホストネットワークにアクセスする方法
  • 実行後にdocker nginxにアクセスできない問題の解決策
  • Dockerコンテナ内の独立IPにアクセスする方法
  • Dockerコンテナ間で通信する3つの方法

<<:  SQL効率を分析する方法を説明する

>>:  Js における new 演算子の役割の詳細な説明

推薦する

SQL 実践演習: オンライン モール データベースの製品カテゴリ データ操作

オンラインショッピングモールデータベース - 商品カテゴリデータ操作(I)プロジェクトの説明電子商取...

CSS で overflow-y: visible; が機能しない理由の分析と解決

シナリオ最近の要件は、モバイル デバイス用の h5 ページです。これには、選択可能なカードの行が必要...

追加、削除、変更、クエリを実行するための JS 操作オブジェクト配列のサンプルコード

1. はじめに最近、私は友人が JSON 配列を追加、削除、変更するための簡単なページを作成するのを...

浮遊要素によって引き起こされる問題と解決策の詳細な説明

1. 問題複数のフローティング要素は親要素の幅を拡張できず、親要素の高さが 0 になる可能性がありま...

オブジェクト内のフィールドを削除する js メソッド

この記事では主に、オブジェクト内のフィールドを削除するための js の実装を紹介し、次のように共有し...

CSS3で作られたレインボーボタンスタイル

結果: 実装コード: html <div class="buttons"&...

非常に詳細な基本的なJavaScript構文ルール

目次01 JavaScript(略称:js) js は 3 つの部分に分かれています。 JavaSc...

Vueはドラッグプログレスバーを実装します

この記事では、ドラッグプログレスバーを実現するためのVueの具体的なコードを例として紹介します。具体...

HTML のインラインブロックの空白を素早く削除する 5 つの方法

inline-block プロパティ値は、「インライン」要素のマージンとパディングを制御する必要があ...

ubuntu20.04 LTS システムのデフォルト ソース ソース リスト ファイルの変更

誤って source.list の内容を変更し、一連のエラーが発生した場合は、デフォルトのソース フ...

MySQL データ挿入効率の比較

データを挿入するとき、以前オフィス システムに取り組んでいたときにはデータベースのパフォーマンスにつ...

HTML でシンプルな ListViews 効果を実装するためのサンプル コード

シンプルなリストビュー効果を実現するHTML結果: CSS スタイル ファイル listviewTe...

CSS3で跳ねるボールのアニメーションを実現

私は通常、大手ウェブサイトの特別ページや製品リリースページを訪問するのが好きです。なぜなら、たくさん...