Docker コンテナ内からマシンのローカルホストに接続するにはどうすればよいですか?
P粉787820396
P粉787820396 2023-08-23 11:55:48
0
2
457

Docker コンテナ内で Nginx を実行しています。ホスト システム上で MySql を実行しています。コンテナ内から MySql に接続したいと考えています。 MySql はローカルホストデバイスにのみバインドします。

この Docker コンテナ内からローカルホスト上のこの MySql または他のプログラムに接続する方法はありますか?

この質問は、「Docker コンテナ内から Docker ホストの IP アドレスを取得する方法」とは異なります。Docker ホストの IP アドレスは、ネットワーク内のパブリック IP またはプライベート IP である可能性があるためです。 Docker コンテナ内からはアクセスできない場合があります (AWS などでホストされている場合はパブリック IP を意味します)。 Docker ホストの IP アドレスを持っている場合でも、Docker ネットワークはオーバーレイ ネットワーク、ホスト ネットワーク、ブリッジ ネットワーク、MacVLAN ネットワークである可能性があるため、コンテナ内から Docker ホストに接続できるわけではありません。 、なしネットワークなど。これにより、この IP アドレスへのコンテナの到達可能性が制限されます。

P粉787820396
P粉787820396

全員に返信 (2)
P粉517090748

すべてのプラットフォームで利用可能

Docker v 20.10 以降 (2020 年 12 月 14 日現在)

内部 IP アドレスを使用するか、特別な DNS 名host.docker.internalに接続します。これは、ホストによって使用される内部 IP アドレスに解決されます。

これは開発目的であり、Docker Desktop 以外の運用環境での使用を目的としたものではありません。

Linux に関する警告

Linux 上のDockerでこの機能を有効にするには、--add-host=host.docker.internal:host-gatewaydockerに追加します。コマンドによりこの機能が有効になります。

Linux 上のDocker Composeでこの機能を有効にするには、コンテナ定義に次の行を追加します。 リーリー

一部のユーザーによると、特別な DNS 名は Docker のデフォルトの

bridgeネットワークでのみ機能し、カスタム ネットワークでは機能しないとのことです。

古い macOS および Windows バージョンの Docker の場合

Docker v 18.03 以降 (2018 年 3 月 21 日現在)

内部 IP アドレスを使用するか、特別な DNS 名

host.docker.internalに接続します。これは、ホストによって使用される内部 IP アドレスに解決されます。

Linux サポートは保留中です

https://github.com/docker/for-linux/issues /264

Docker の古い macOS バージョンの場合

Docker for Mac v 17.12 から v 18.02

上記と同じですが、

docker.for.mac.host.internalを使用します。

Docker for Mac v 17.06 から v 17.11

上記と同じですが、代わりに

docker.for.mac.localhostを使用します。

Docker for Mac 17.05 以前

Docker コンテナからホストにアクセスするには、ネットワーク インターフェイスに IP エイリアスをアタッチする必要があります。任意の IP をバインドできますが、それを他の目的で使用していないことを確認してください。

sudo ifconfig lo0 エイリアス 123.123.123.123/24

次に、サーバーが上記の IP または

0.0.0.0でリッスンしていることを確認します。ローカルホスト127.0.0.1でリッスンしている場合、接続は受け入れられません。

その後、Docker コンテナーがこの IP を指すようにして、ホストにアクセスします。

テストするには、コンテナ内で

curl -X GET 123.123.123.123:3000のようなコマンドを実行します。

エイリアスは再起動するたびにリセットされるため、必要に応じて起動スクリプトを作成します。

ソリューションとその他のドキュメントはこちら:

https://docs.docker.com/desktop/networking/#use-cases-and-workarounds-for-all-platforms

いいねを押す+0
    P粉019353247

    ######編集:######

    Docker-for-macまたは

    Docker-for-Windows

    18.03 を使用している場合は、ホストhost.docker.internal(## の代わりに) を使用します。 # 接続文字列の 127.0.0.1)。Docker-for-Linux20.10.0 を使用している場合は、ホスト host.docker.internal

    ifを使用することもできます--add-host host.docker.internal:host-gatewayオプションで Docker コンテナーを開始するか、次のコード スニペットが docker-compose.yml ファイルに追加されます。 リーリーそれ以外の場合は、以下をお読みくださいTLDR

    docker run

    コマンドで

    --network="host"
    を使用すると、docker コンテナーの

    127.0.0.1

    が docker host を指します。

    注:ドキュメントによると、このモードは Linux バージョンの Docker でのみ利用可能です。Dockerコンテナネットワークモードに関する注意事項

    Docker は、コンテナーの実行時にさまざまなネットワーク モードを提供します。選択したモードに応じて、Docker ホスト上で実行されている MySQL データベースへの接続方法が異なります。 p>


    docker run --network="bridge" (デフォルト)

    Docker はデフォルトで

    docker0という名前のブリッジを作成します。 Docker ホストと Docker コンテナの両方がブリッジ上に IP アドレスを持っています。

    Docker ホストで、

    sudo ip addr show docker0

    と入力します。次のような出力が表示されます。

    リーリーつまり、docker0

    ネットワーク インターフェイス上の Docker ホストの IP アドレスは

    172.17.42.1です。

    ここで、新しいコンテナを起動してシェルを取得します。

    docker run --rm -it ubuntu:trusty bashコンテナにip addr show eth0と入力して、そのコンテナを確認します。 master ネットワークインターフェースの設定方法:リーリー

    ここでのコンテナの IP アドレスは

    172.17.1.192です。次に、ルーティング テーブルを表示します:リーリーしたがって、Docker ホストの IP アドレス172.17.42.1

    がデフォルト ルートとして設定され、コンテナーからアクセスできます。

    リーリーdocker run --network="host"

    または、Docker コンテナを実行して、

    ネットワーク設定をhost

    に設定することもできます。このようなコンテナはネットワーク スタックを Docker ホストと共有し、コンテナの観点から見ると、

    localhost

    (または

    127.0.0.1) は Docker ホストを指します。p>Docker コンテナーで開かれたポートはすべて、Docker ホストでも開かれることに注意してください。これには、-pまたは-Pdocker run

    optionは必要ありません。Docker ホストの IP 構成: リーリー およびhostモードの Docker コンテナ:リーリー

    ご覧のとおり、Docker ホストと Docker コンテナはまったく同じネットワーク インターフェイスを共有しているため、同じ IP アドレスを持っています。


    コンテナからMySQLに接続する

    ###ブリッジモード###

    ブリッジ モード

    のコンテナから Docker ホスト上で実行されている MySQL にアクセスするには、MySQL サービスが

    172.17.42.1IP アドレスで接続をリッスンしていることを確認する必要があります。これを行うには、MySQL 構成ファイル (my.cnf) にbind-address = 172.17.42.1

    または

    bind-address = 0.0.0.0) があることを確認してください。ゲートウェイの IP アドレスを使用して環境変数を設定する必要がある場合は、コンテナーで次のコードを実行できます。 リーリー次に、アプリケーションで

    DOCKER_HOST_IP

    環境変数を使用して MySQL への接続を開きます。

    注:

    bind-address = 0.0.0.0

    を使用すると、MySQL サーバーはすべてのネットワーク インターフェイス上の接続をリッスンします。これは、MySQL サーバーがインターネットからアクセスできることを意味します。それに応じてファイアウォール ルールを設定してください。注 2:

    bind-address = 172.17.42.1

    を使用すると、MySQL サーバーは127.0.0.1Connect で確立されたサーバーをリッスンしません。 >。 MySQL に接続する Docker ホスト上で実行されているプロセスは、172.17.42.1IP アドレスを使用する必要があります。ホストモードDocker ホスト上で実行されている MySQL にホスト モードのコンテナからアクセスするには、MySQL 設定で

    bind-address = 127.0.0.1

    のままにし、

    127.0.0.1## に接続します。コンテナから:

    リーリー注:mysql -h localhost

    の代わりに

    mysql -h 127.0.0.1を使用してください。そうしないと、MySQL クライアントは Unix ソケット Make を使用しようとします。接続。

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!