外部デバイスからDockerサービスにアクセスすることは可能ですか? figを介してサービスを構築し、ポート3000を公開しました。docker-osxでfigを使用しているため、dockerはvirtualbox内で実行されています。
次に、外部デバイス(携帯電話やタブレットなど)から提供されるサービスにアクセスする必要があります。
現時点では、VirtualBox-Environmentをホストしているマシンからlocaldocker:3000でのみサービスにアクセスできました。
ローカルマシンに、そのポートでの着信接続をリッスンしてから、それらのリクエストを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/
に当たった場合は正常に動作します
テストに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ポートに転送します(これを使用してローカルでテストします)
明らかに、上記のポートはネットワークからアクセスできませんが、ファイアウォールを構成して転送することができます=)
VirtualBox VM設定にポート転送ルールを追加することをお勧めします。
VM設定=>ネットワークタブ=>アダプタ1を開きます。デフォルトではNATに接続されています。
ポート転送ボタンを押してから、新しいルールを追加します。
ホストIPはコンピューターのIPアドレスである必要があります。 127.0.0.1の場合もありますが、その場合はコンピューターでのみ表示されます。
ホストポートの値については、少し実験する必要があります。未使用であり、コンピューターのファイアウォールで許可されている必要があります。
ゲストIPは空のままにします。
あなたの質問のように、ゲストポートは3000でなければなりません。
その後、ローカルネットワークからアクセスできるようになります。アドレス http:// Host_IP:Host_PORT
MacOユーザー向け。
のようです Sudo ifconfig lo0 alias 10.254.254.254
魔法をします。コンテナから外部IPホスト(10.254.254.254)にアクセスできます
book2docker ip
によって報告されたIPアドレスを使用して、boot2dockervmにアクセスできるはずです。