Dockerコンテナからホストポートにアクセスする方法 [重複] 質問する

Dockerコンテナからホストポートにアクセスする方法 [重複] 質問する

Jenkins を実行する Docker コンテナがあります。ビルド プロセスの一環として、ホスト マシン上でローカルに実行される Web サーバーにアクセスする必要があります。ホスト Web サーバー (ポートで実行するように構成可能) を Jenkins コンテナに公開する方法はありますか?

Linux マシン上でネイティブに docker を実行しています。

アップデート:

以下の @larsks の回答に加えて、ホスト マシンからホスト IP の IP アドレスを取得するには、次の操作を行います。

ip addr show docker0 | grep -Po 'inet \K[\d.]+'

ベストアンサー1

すべてのプラットフォーム

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

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

これは開発目的であり、Docker Desktop 以外の本番環境では機能しません。

Linux の注意点

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

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

extra_hosts:
    - "host.docker.internal:host-gateway"

一部のユーザーによると、特別な DNS 名は Docker のデフォルトbridgeネットワーク内でのみ機能し、カスタム ネットワーク内では機能しません。


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

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

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

Linuxサポートは保留中参考: docker for linux


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

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 alias 123.123.123.123/24

次に、サーバーが上記の IP をリッスンしていることを確認します0.0.0.0。localhost をリッスンしている場合は、127.0.0.1接続が受け入れられません。

次に、Docker コンテナをこの IP にポイントするだけで、ホスト マシンにアクセスできるようになります。


curl -X GET 123.123.123.123:3000テストするには、コンテナ内で次のようなものを実行できます。

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

解決策と詳細なドキュメントはこちらをご覧ください:https://docs.docker.com/desktop/networking/#すべてのプラットフォームでの使用ケースと回避策

おすすめ記事