P粉5170907482023-08-24 11:07:24
Docker v 20.10 以降 (2020 年 12 月 14 日現在)
内部 IP アドレスを使用するか、特別な DNS 名 host.docker.internal
に接続します。これは、ホストによって使用される内部 IP アドレスに解決されます。
これは開発目的であり、Docker Desktop 以外の運用環境での使用を目的としたものではありません。
Linux に関する警告
Linux 上の Docker でこの機能を有効にするには、--add-host=host.docker.internal:host-gateway
を docker
に追加します。コマンドによりこの機能が有効になります。
Linux 上の Docker Compose でこの機能を有効にするには、コンテナ定義に次の行を追加します。 リーリー
一部のユーザーによると、特別な DNS 名は Docker のデフォルトのbridge ネットワークでのみ機能し、カスタム ネットワークでは機能しないとのことです。
Docker v 18.03 以降 (2018 年 3 月 21 日現在)
内部 IP アドレスを使用するか、特別な DNS 名host.docker.internal に接続します。これは、ホストによって使用される内部 IP アドレスに解決されます。
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
0.0.0.0 でリッスンしていることを確認します。ローカルホスト
127.0.0.1 でリッスンしている場合、接続は受け入れられません。
テストするには、コンテナ内で
curl -X GET 123.123.123.123:3000 のようなコマンドを実行します。
ソリューションとその他のドキュメントはこちら:
https://docs.docker.com/desktop/networking/#use-cases-and-workarounds-for-all-platforms
P粉0193532472023-08-24 09:26:22
######編集:######
Docker-for-mac または
Docker-for-Windows 18.03 を使用している場合は、ホスト host.docker.internal (## の代わりに) を使用します。 # 接続文字列の 127.0.0.1)。
Docker-for-Linux 20.10.0 を使用している場合は、ホスト < /code>host.docker.internal
ifを使用することもできます --add-host host.docker.internal:host-gateway オプションで Docker コンテナーを開始するか、次のコード スニペットが docker-compose.yml ファイルに追加されます。
リーリー
それ以外の場合は、以下をお読みください
TLDR
コマンドで
--network="host"
注:
ドキュメントによると、このモードは Linux バージョンの Docker でのみ利用可能です。
Dockerコンテナネットワークモードに関する注意事項
Docker は、コンテナーの実行時に さまざまなネットワーク モードを提供します。選択したモードに応じて、Docker ホスト上で実行されている MySQL データベースへの接続方法が異なります。 p>
docker0 という名前のブリッジを作成します。 Docker ホストと Docker コンテナの両方がブリッジ上に IP アドレスを持っています。
Docker ホストで、
リーリー
つまり、
docker0
172.17.42.1 です。
docker run --rm -it ubuntu:trusty bash コンテナに
ip addr show eth0 と入力して、そのコンテナを確認します。 master ネットワークインターフェースの設定方法:
リーリー
172.17.1.192 です。次に、ルーティング テーブルを表示します:
リーリー
したがって、Docker ホストの IP アドレス
172.17.42.1
リーリー
docker run --network="host"
ネットワーク設定を host
127.0.0.1) は Docker ホストを指します。 p>
Docker コンテナーで開かれたポートはすべて、Docker ホストでも開かれることに注意してください。これには、-p
または -P
docker run
option は必要ありません。
Docker ホストの IP 構成: <代码>
リーリー
および host
モードの Docker コンテナ:
リーリー
172.17.42.1 IP アドレスで接続をリッスンしていることを確認する必要があります。
これを行うには、MySQL 構成ファイル (my.cnf) に
bind-address = 172.17.42.1
bind-address = 0.0.0.0) があることを確認してください。
ゲートウェイの IP アドレスを使用して環境変数を設定する必要がある場合は、コンテナーで次のコードを実行できます。
リーリー
次に、アプリケーションで
環境変数を使用して MySQL への接続を開きます。
注:
を使用すると、MySQL サーバーはすべてのネットワーク インターフェイス上の接続をリッスンします。これは、MySQL サーバーがインターネットからアクセスできることを意味します。それに応じてファイアウォール ルールを設定してください。
注 2:
を使用すると、MySQL サーバーは 127.0.0.1 Connect で確立されたサーバーをリッスンしません。 >。 MySQL に接続する Docker ホスト上で実行されているプロセスは、172.17.42.1
IP アドレスを使用する必要があります。
ホストモード
Docker ホスト上で実行されている MySQL にホスト モードのコンテナからアクセスするには、MySQL 設定で
リーリー
注:
mysql -h localhost
mysql -h 127.0.0.1 を使用してください。そうしないと、MySQL クライアントは Unix ソケット Make を使用しようとします。接続。