web-dev-qa-db-ja.com

Windows上のDocker:コンテナーIPを使用してホストからコンテナーに接続する方法

私が持っています

  • ウインドウズ10
  • Docker for Windows V. 1.12.5 Rev.9503。boot2dockerやVirtualBoxに依存しなくなりました。

Dockerイメージで実行されている多くのJBossインスタンスがあります(172.18.0.2はデータベースです):

  • インスタンス1:名前:jboss-eap、IP:172.18.0.3
  • インスタンス2:名前:jboss-eap-arquillian、IP:172.18.0.4

同時に実行されます。各JBossインスタンスは、たとえば8787、8080、および8443ポート。

ブリッジネットワークも作成しました:docker network create --driver bridge --subnet 172.18.0.0/24 bridged_network

現在、ホストがプレフィックスを使用してさまざまなサービスにアクセスできるようにローカルポート転送を設定しています(たとえば、インスタンス1のポート8080にアクセスする場合、ホストはlocalhost:28080を使用して接続します)。しかし、それは非常にエラーを起こしやすいです。

今、私はコンテナのIPを使用してホストからそれらのポートにアクセスしたい172.18.0.4:8080の呼び出し(次のステップ:ホスト名:jboss-eap-arquillian:8080を使用)。これはコンテナからコンテナへスムーズに機能しますが、ホストから接続するように設定することができませんでした。

IP 10.0.75.1を備えたWindowsネットワークインターフェイス(タイプ:DockerNAT)がありますが、手動で作成した可能性があります(今はかなり長い間試されています)。しかし、これはコンテナのポートをこのデバイスにバインドするときに役立ちます。 docker run ... -p 10.0.75.1:8080:8080その後、10.0.75.1:8080を使用してサービスを呼び出すことができますが、2番目のコンテナーでは役立ちません。

また、Dockerのホストネットワークデバイスを使用しようとしましたが、それは1台のマシンでのみ動作するようですb。静的構成を実行するJUnitテストに必要なIPを静的に設定できません。注:ネットワーク(およびDHCP)を頻繁に変更すると、固定されていないIPが再び発生するため、起動時にネットワークDHCPに依存してIPを割り当てることはできません。

したがって、基本的には、コンテナIP(例1の172.18.0.3など)を使用して、コンテナ(ポート8080など)によって提供されるサービスを呼び出すことができるような方法でネットワーク/コンテナを設定する方法を探しています。 172.18.0.3:8080を使用するホストから。

9
kniffte

Windows用ドッカーでは、アドレス10.0.75.1:8080を使用できますが、ファイアウォールを設定する必要があります。より良い方法は、アドレス10.0.75.2:8080を使用することです。

両方のアドレスについて、コンテナを実行するときにポートを公開する必要があります

docker run -p 8080:8080 image_name

詳細 https://github.com/docker/for-win/issues/334#issuecomment-297030101

10
hrakup

できません。 dockerは仮想マシンではないため、IPアドレスを介してdockerホストにアクセスすることはできません。

ここに私の同じ質問を参照してください: https://forums.docker.com/t/access-dockerized-services-via-the-containers-ip-address/21151

そして、これがどのように機能するかについての私の認識、ここ: https://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/

コンテナでホストされているアプリをローカルホストから使用する必要がある場合は、-pdocker runオプションでアプリのポートを公開します

docker run -p 8080:8080 image_name

そして、そのサービスのlocalhost:8080に接続します

1
Derick Bailey