TL; DR VirtualBoxホストのネットワークモードを確認bridged
します。ローカルネットワーク上で仮想マシン(およびそれがホストしているDockerコンテナ)にアクセスできるようにする必要があります。
HTTP経由でアプリケーションにアクセスするために、どのホストに接続するかが混乱しているようです。あなたは実際にあなたの設定が何であるかを詳しく説明していません-あなたがあなたのタグに「Windows」と「VirtualBox」を持っているという事実に基づいて、私はいくつかの推測をするつもりです。
WindowsホストのVirtualBoxで実行されているLinuxのフレーバーでDockerを実行していると思います。次のようにIPアドレスにラベルを付けます。
D
= DockerコンテナのIPアドレス
L
= VirtualBoxで実行されているLinuxホストのIPアドレス
W
= WindowsホストのIPアドレス
WindowsホストでGoアプリケーションを実行するhttp://W:8080/
と、ローカルネットワーク上のどこからでもアプリケーションに接続できます。これは、GoアプリケーションがWindowsマシンのポート8080をバインドし、IPアドレスでポート8080にアクセスしようとするすべてのユーザーW
が接続されるために機能します。
そして、これがより複雑になるところです:
VirtualBoxは、仮想マシン(VM)をセットアップするときに、いくつかの異なるモードのいずれかでネットワークを構成できます。さまざまなオプションが何であるかは覚えていませんが、必要なのはbridged
です。このモードでは、VirtualBoxは、ネットワークに接続されている他のマシンと同じように、仮想マシンをネットワーク上のスタンドアロンマシンであるかのようにローカルネットワークに接続します。ではbridged
モード、仮想マシンが他のマシンのようにネットワーク上に表示されます。他のモードでは設定が異なり、マシンはネットワーク上に表示されません。
したがって、Linuxホスト(bridged
)のネットワークを正しく設定すると、Linuxホストはローカルネットワーク(192.168.0.xなど)にIPアドレスを持ち、Dockerコンテナにアクセスできるようになりますhttp://L:8080/
。
Linuxホストが以外のモードに設定されている場合、Windowsホストからアクセスできる可能性がありbridged
ますが、これは、ホストがどのモードにあるかによって異なります。
編集-以下のコメントに基づいて、私が上で説明した状況が正しいように聞こえます。
少しバックアップしましょう。これが私のコンピューター(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ホストではないため、ここに別のレイヤーがあり、問題が発生しているこのレイヤーを介した通信です。
必要なのは、次の2つのうちの1つです。
Dockerコンテナをホストポートに接続するのと同じように、VirtualBoxVMのポート8080をWindowsホストのポート8080に接続します。
bridged
上記のネットワークモードでVirtualBoxVMをローカルネットワークに直接接続します。
最初のオプションを選択すると、WindowsホストのIPアドレスまたはホスト名がhttp://W:8080
どこにW
あるかでコンテナーにアクセスできるようになります。2番目を選択すると、LinuxVMのIPアドレスまたはホスト名がhttp://L:8080
どこにあるコンテナにアクセスできるようになりL
ます。
以上が上位レベルの説明です。次に、VirtualBoxVMの構成を変更する方法を理解する必要があります。そして、ここで私は本当にあなたを助けることができません-私はあなたがあなたのWindowsマシンでこれをすべて行うためにどのツールを使っているのか分かりません、そして私はWindowsでDockerを使うことに全く慣れていません。
VirtualBox構成ウィンドウが表示されたら、以下に説明する変更を加えることができます。VMを変更するコマンドラインクライアントもありますが、私はそれについてよく知りません。
以下のためbridged
のモード(これは本当に最も簡単な選択である)、あなたのVMをシャットダウン上部にある「設定」ボタンをクリックして、ネットワークへのモードを変更bridged
し、VMを再起動して、あなたがしている良い行くことに。VMは、DHCPを介してローカルネットワーク上のIPアドレスを取得し、そのIPアドレスでネットワーク上の他のコンピューターから見えるようにする必要があります。