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/#すべてのプラットフォームでの使用ケースと回避策