TL; DRは、あなたのVirtualBoxホストのネットワークモードを確認してください - あなたは仮想マシン(とそれがホストしドッカーコンテナを)したい場合には、ローカルネットワーク上でアクセスbridged
でなければなりません。
HTTP経由でアプリケーションにアクセスするために接続するホストが混乱しているように思えます。あなたは本当にあなたの設定が何であるかを綴っていません - タグに "Windows"と "VirtualBox"があるという事実に基づいて、いくつかの推測をします。
WindowsホストのVirtualBoxで実行されているLinuxのいくつかの味でDockerを実行していると思います。私は次のようにIPアドレスをラベル付けするつもりです:
D
がドッカーコンテナLinuxホストのIPアドレスは、VirtualBoxの
W
で実行されている
L
=のIPアドレスを= = IPアドレスWindowsホストの
WindowsホストでGoアプリケーションを実行すると、ローカルネットワークのどこからでもhttp://W:8080/
で接続できます。これは、GoアプリケーションがWindowsマシン上のポート8080をバインドし、IPアドレスW
でポート8080にアクセスしようとすると接続されるためです。それがより複雑になるのはここ
そしてだ:
VirtualBoxは、それは仮想マシン(VM)を設定したときに、いくつかの異なるモードのいずれかでネットワークを構成することができます。私はすべてのオプションが何であるか覚えていませんが、あなたが望むのはbridged
です。このモードでは、バーチャルマシンはネットワークに接続されている他のマシンと同様に、バーチャルマシンをネットワーク上のスタンドアローンマシンのようにローカルネットワークに接続します。 bridged
モードでは、仮想マシンは他のマシンと同様にネットワーク上に表示されます。他のモードでは、設定が異なるため、ネットワーク上にマシンが表示されません。
したがって、Linuxホスト(bridged
)のネットワークを正しく設定すると、Linuxホストはローカルネットワーク上のIPアドレス(192.168.0.xなど)を持ち、Dockerにアクセスすることができますコンテナはhttp://L:8080/
です。
Linuxホストがbridged
以外のいくつかのモードに設定されている場合は、あなたが Windowsホストからアクセスすることができるかもしれないが、これはそれがでますまさにモードに依存しようとしている。
EDIT - 以下のコメントに基づいて、私が上に述べた状況が正しいことと非常によく似ています。
ちょっとバックアップしましょう:私のコンピュータ(Ubuntu Linux)でDockerが動作する方法は次のとおりです。
あなたが持っているのと同じコマンドを実行したとします:docker run -p 8080:8080 dockertest
。これは、dockertest
イメージに基づいて新しいコンテナを開始し、Linuxホスト(私のPC)のポート8080をコンテナのポート8080に転送(接続)します。 Dockerは、Dockerデーモンが通信し、コンテナ同士が通信できるように、内部ネットワーク(独自のIPアドレスを持つ)を設定します。だから、基本的には-p 8080:8080
でDockerの内部ネットワーキングを「外部」ネットワークに接続しています。特定のポート上のホストのネットワークアダプタ。
これまでの私とは?さて、一歩踏み込んでシステムを見てみましょう。あなたのマシンはWindowsを実行しています - Dockerは(現在)Windows上で動作していないので、使用しているツールはVirtualBox仮想マシンにLinuxホストを設定しています。ご使用の環境でdocker run
を実行すると、まったく同じことが起こります。Linuxホストのポート8080は、コンテナのポート8080に接続されています。ここでの大きな違いは、Windowsホストがコンテナが実行されているLinuxホストではないことです。ここにはもう1つのレイヤーがあり、問題が発生しているこのレイヤー全体の通信です。あなたがホストポートにドッカーコンテナを接続するだけのように、Windowsホスト上のポート8080にVirtualBoxのVM上のポート8080を接続する
:あなたが必要なもの
は、2つのいずれかです。
上記のbridged
ネットワークモードを使用して、VirtualBox VMをローカルネットワークに直接接続することができます。あなたが最初のオプションのために行く場合は
、あなたはW
は、WindowsホストのIPアドレスまたはホスト名がどこにあるかhttp://W:8080
で容器にアクセスすることができます。 2番目を選択すると、http://L:8080
にあるコンテナにアクセスできます。L
は、Linux VMのIPアドレスまたはホスト名です。
これはすべて上位レベルの説明です。これで、VirtualBox VMの設定を変更する方法を理解する必要があります。そして、ここで私は本当にあなたを助けることができません - 私はあなたのWindowsマシン上でこれをすべて行うためにどのツールを使用しているのか分かりませんし、Windows上でDockerを使うのに慣れていません。
VirtualBox設定ウィンドウが表示される場合は、以下で説明する変更を加えることができます。 VMを変更するコマンドラインクライアントもありますが、それに精通していません。
bridged
モードの場合は、VMをシャットダウンし、上部の[設定]ボタンをクリックしてネットワークモードをbridged
に変更し、VMを再起動してください行く。 VMはDHCP経由でローカルネットワーク上のIPアドレスを取得し、そのIPアドレスのネットワーク上の他のコンピュータから見えるようにする必要があります。
Dockerfileで-pオプションと一緒にEXPOSE 8080を使用しましたか?また、コンテナが実行されているボックスのポート8080がセキュリティルールによってブロックされていないことを確認します。 – keda
@kedaはい、DockerfileにはEXPOSE 8080が含まれています。Dockerのクイックスタートターミナルを使用してコンテナをローカルコンピュータから実行していますが、Windowsファイアウォールも無効にしましたが、どちらも動作しませんでした。私は紛失しています – raulsntos