web-dev-qa-db-ja.com

ネットワーク内の外部マシンからDockerにアクセスする

外部デバイスからDockerサービスにアクセスすることは可能ですか? figを介してサービスを構築し、ポート3000を公開しました。docker-osxでfigを使用しているため、dockerはvirtualbox内で実行されています。

次に、外部デバイス(携帯電話やタブレットなど)から提供されるサービスにアクセスする必要があります。

現時点では、VirtualBox-Environmentをホストしているマシンからlocaldocker:3000でのみサービスにアクセスできました。

15
David Geh

ローカルマシンに、そのポートでの着信接続をリッスンしてから、それらのリクエストをDockerコンテナに転送するように指示する必要があります。

Nginx これはかなり得意で、次のような単純な構成です:

/ etc/nginx/sites-enabled/your-file.conf

server {                                                                   
    listen 3000;                                                              

    server_name YOUR_IP_ADDRESS;                                              

    proxy_redirect off;                                                       
    proxy_buffering off;                                                      
    proxy_set_header Host $Host;                                              
    proxy_set_header X-Real-IP $remote_addr;                                  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;              

    location / {                                                              
        proxy_pass http://127.0.0.1:3000;                                            
    }                                                                         
} 

お使いの携帯電話/タブレットがhttp://YOUR_IP_ADDRESS:3000/に当たった場合は正常に動作します

8
Chris McKinnel

テストにOSX(およびWindows)を使用している場合、Dockerは仮想マシンを作成します。これは、Linuxベースのシステムで実行する場合とは少し異なります。

次のことを試してください。

docker-machine ip

これにより、仮想マシンのIPが返されます。私の例では、

192.168.99.100

docker psを実行すると、ポートマッピングが表示されます(少し下の表をクリーンアップしました)

$ docker ps
CONTAINER ID        IMAGE                STATUS              PORTS                   NAMES
42f88ac00e6f        nginx-local          Up 30 seconds       0.0.0.0:32778->80/tcp

0.0.0.0:32778->80/tcpは、dockerが私のマシン(この場合は仮想マシン)の32778(ランダムに割り当てられたポート)をコンテナーのポート80にマッピングしていることを意味します。

この情報はdocker port 42f88ac00e6f 80からも取得できます(42f88ac00e6fはコンテナーIDまたは名前です)

コンテナ上のnginxにアクセスするために、仮想マシンのip:32778を使用できるようになりました。

http://192.168.99.100:32778/ Dockerコンテナの80ポートに転送します(これを使用してローカルでテストします)

明らかに、上記のポートはネットワークからアクセスできませんが、ファイアウォールを構成して転送することができます=)

19
Abdo

VirtualBox VM設定にポート転送ルールを追加することをお勧めします。

VM設定=>ネットワークタブ=>アダプタ1を開きます。デフォルトではNATに接続されています。
ポート転送ボタンを押してから、新しいルールを追加します。
ホストIPはコンピューターのIPアドレスである必要があります。 127.0.0.1の場合もありますが、その場合はコンピューターでのみ表示されます。
ホストポートの値については、少し実験する必要があります。未使用であり、コンピューターのファイアウォールで許可されている必要があります。
ゲストIPは空のままにします。
あなたの質問のように、ゲストポートは3000でなければなりません。

その後、ローカルネットワークからアクセスできるようになります。アドレス http:// Host_IP:Host_PORT

13
Roald

MacOユーザー向け。

のようです Sudo ifconfig lo0 alias 10.254.254.254魔法をします。コンテナから外部IPホスト(10.254.254.254)にアクセスできます

1
yuklia

book2docker ipによって報告されたIPアドレスを使用して、boot2dockervmにアクセスできるはずです。

0
Abel Muiño