質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • CentOS

    3153questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • MacOS(OSX)

    2361questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • Windows

    1710questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • Docker

    1049questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

WindowsのDockerのコンテナに外部からアクセスしたい。

解決済

回答 2

投稿

  • 評価
  • クリップ 2
  • VIEW 11K+

suvera

score 92

前提・実現したいこと

Windowsで作成したコンテナに外部(別PCのブラウザなど)からアクセスしたいです。

現在WindowsとMacを利用して開発を行っています。
WindowsもMacも同じように実行してコンテナを作成しているのですが、
Macは外部からもアクセスできるが、Windowsではアクセスできない状態になってしまっています。
スクリプトや環境などコンテナの中はどちらも同じ状態になるようにコンテナを作成しています。

発生している問題

Docker Kitematic で確認すると

Macで作成したコンテナのPortsには
DOCKER PORT -> 80
MAC IP:PORT -> localhost:ポート

Windowsで作成したコンテナのPortsには
DOCKER PORT -> 80
MAC IP:PORT -> 192.168.99.100:ポート

となっています。
cmdに「ipconfig」を入力し、192.168.99.100を確認すると
「VirtualBox Host-Only Network」とありました。

この部分の違いが問題となって接続できていないと考えていますが
解決方法がわかりません。
何をすればWindowsで作成したコンテナにも外部からアクセスできるようになるか教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

sshのポートフォワーディングを使用してネットワーク上にポートを公開することができます。

  • 動作確認等のために一時的に他からアクセスできるようにする程度を想定。
  • Docker Toolboxを利用している想定。

Docker Quickstart Terminalで以下のコマンドを実行します。

# パスワードは tcuser (デフォルト設定)
$ ssh -fNCL 0.0.0.0:80:localhost:ポート docker@192.168.99.100
  • -f : SSHをバックグラウンドで実行する
  • -N : SSHトンネリングのみに使用する(ターミナルとして使用しないということか?よくわからんです)
  • -C : データを圧縮して送る
  • -L : Windows上のソケット 0.0.0.0:80 へのパケットを、dockerホストのソケット localhost:ポート に転送

【参考】

【おまけ】

SSHポートフォワーディングについて図にしてみました。

  • 基本はローカルからリモートへのSSH接続 ssh docker@192.168.99.100
  • SSH接続経路を利用してローカルポートへの接続をリモート側ネットワークのポートに転送する
  • ローカル側は接続元のソケット(IPアドレス:ポート)を指定し、リモート側は接続先からアクセスできるIPアドレスとポートを指定する
  • リモート側を「localhost:ポート」としたが、「コンテナIP:80」でも通信可能  
    「localhost:ポート」(Windows⇒SSHサーバ⇒localhost⇒dockerポートフォワード⇒コンテナ)  
    「コンテナIP:80」(Windows⇒SSHサーバ⇒コンテナ)

SSHポート転送

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/08 14:20

    返信が遅れてしまい申し訳ありません。
    解答ありがとうございます。
    教えていただいたコマンドによって別PCから接続することができました。

    ただ、コマンドの内容について正しく認識できているか心配なのでお答えいただけたら幸いです。
    -L オプションで指定する部分(0.0.0.0:80:localhost:ポート)についてです。

    https://www.kmc.gr.jp/advent-calendar/ssh/2013/12/09/tunnel2.html
    上記のサイトではこの部分が以下のように書かれていました。

    「(ローカルで使用するポート):(目的サーバのアドレス):(目的サーバで待ち受けてるポート番号)」

    これに当てはめて考えると

    ・「0.0.0.0」→ 今回はWindowsの全てのIPアドレス
    ・80 → ローカル(Windows)で使用するポート
    ・localhost → 目的のサーバー(Dockerのコンテナ)のアドレス
    ・ポート → 目的のサーバーで待ち受けてるポート番号

    と言った形になると思うのですが、
    なぜlocalhost という指定になるのかがわかりませんでした。
    docker@192.168.99.100と、コマンド後のパスワードからログインを行って
    コンテナ側から見てるのかと思いましたがそうなると コンテナ→ホスト に SSH を許可することになる気がして違和感を感じました。

    また別のサイトを見たときに
    http://qiita.com/mechamogera/items/b1bb9130273deb9426f5
    こちらのサイトのローカルフォワードでは3つのサーバーが描かれています。
    ただ、今回で言うと localに当たると思われるWindows と、
    targetに当たるDockerのコンテナ しかないように思えます。
    で、remoteに当たる箇所で docker@192.168.99.100 を入力しているわけですが
    このつながりというか、流れ的なものが上手く理解できません。

    もしよろしければご説明いただけないでしょうか?



    キャンセル

  • 2016/11/08 20:45

    説明図を追加してみました。

    キャンセル

  • 2016/11/09 10:29

    ありがとうございます!

    キャンセル

  • 2016/11/11 13:38

    時間がたってからすみません。
    こちらの方法で外部から見られるようにしたものを一覧で確認したり、
    削除する方法を教えていただけないでしょうか。

    キャンセル

0

ブリッジ接続したいって事ですよね。多分。
参考URL

下記URLの説明見て、よくわからない、自分のやりたいこととは違うと思ったらVirtualBoxの設定を直接いじっちゃうのが楽です(ただ、環境構築がdockerだけで完結しなくなるのであまり良い手段ではありません)
http://kubotti.hatenablog.com/entry/2015/11/14/160920

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • CentOS

    3153questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • MacOS(OSX)

    2361questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • Windows

    1710questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • Docker

    1049questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです