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

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

ただいまの
回答率

89.13%

DockerでWebサーバを立ち上げた場合に、アクセス時にポート番号は省略できませんか?

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,210

taro373

score 113

DockerでWebサーバを立ち上げる時に、ポートの指定を
「-p 8888:80」のように書く例がほとんどなのですが、

この書き方では、アクセス時はhttp://localhost:8080/となります。
ローカルでテストしているときはこれで良いのですが、
Webサーバを公開するとなった時に、ポート番号は指定しないで既定値に
したいと考えました。

下記の書き方もする例も見つけました。

$ sudo docker run -it -p 80:80 --link mysql:db --name wordpress centos:wordpress /bin/bash

Webサーバを立ち上げるのですから、locachostで参照するだけでは
ないと思います。
「-p 8080:80」と指定する場合と、「-p 80:80」としてする場合の
違いや、不都合(メリット・デメリット)について教えてください。

当該のサーバで、既にWebサーバ(apache)が起動している場合、
Dockerで起動したapacheには繋がりませんね。

ホスト名でアクセスしたときは、通常のドキュメントルートに、
ipアドレス(ポート番号は省略)でアクセスしたときは、Dockerで起動した
Webサーバにアクセスするということはできるのでしょうか。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • teikoku-penguin

    2018/12/10 12:43

    質問のタイトルが質問内容に相応しくないので変更したほうが良いかと思います アクセス時にポート番号を省略できるかではなく、一つの物理ホストで複数のwebサーバーを構築する方法かと

    キャンセル

  • taro373

    2018/12/10 13:00

    わからないことがわからない、状況でした。 教えていただきたかったことは、 DockerでWebサーバとなると、ポート番号をしている例ばかり出てきますが、 80番で起動しても動作できるのでしょうか です。 以下の流れで質問しました。 ・例を見ると8080:80とすることがおおい ・80:80の例もある ・80:80としてみたいが、既に動いていたらポートが重なる 実際には既にWebサーバが動いている状況ではないので、 3番目を考えてわかりにくい質問になってしましましたこと お詫びします。

    キャンセル

回答 2

checkベストアンサー

+2

まず、http://teratail.com/のようにアクセスした場合、「80番ポート」をアクセスするように決まっています。

当該のサーバで、既にWebサーバ(apache)が起動している場合、
Dockerで起動したapacheには繋がりませんね。

はい、1つのポートに待ち受けできるプロセスは1つだけなので、先にApacheが待ち受けていれば別のプロセスが同じ80番ポートに待ち受けることはできません。

ホスト名でアクセスしたときは、通常のドキュメントルートに、
ipアドレス(ポート番号は省略)でアクセスしたときは、Dockerで起動した
Webサーバにアクセスするということはできるのでしょうか。

80番にはリバースプロキシを立てて、アクセス方法によって振り分ける、という方法が考えられます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/12/10 14:19

    ありがとうございました。
    次は「80番にはリバースプロキシを立てて、アクセス方法によって振り分ける」方法を
    かんばって調べます。

    質問への追記に書きましたが、わかりにくい質問になってしましましたこと
    お詫びします。

    キャンセル

  • 2018/12/10 14:19 編集

    .

    キャンセル

+1

ホスト名でアクセスしたときは、通常のドキュメントルートに、
ipアドレス(ポート番号は省略)でアクセスしたときは、Dockerで起動した
Webサーバにアクセスするということはできるのでしょうか。

結論としてそのままでは無理かと思います。

質問主さんが思い描いている環境が以下の環境だったとして簡単に解説します。
(ネットワークエンジニアとかではないので間違ってたらすみません)

  • グローバルIPアドレス: 123.456.789.101
  • グローバルIPに紐づけされたドメイン: hoge.jp
  • 物理サーバーホスト名: www
  • 物理サーバーローカルアドレス: 192.168.1.2
  • ホストOS上 Apacheサーバー(webサーバーA)待機ポート: 80
  • Docker上 Apacheサーバー(webサーバーB)待機ポート: 80

上の環境であった場合
同じマシンではホストOS上のApacheサーバーとDocker上のゲストOSに乗っているApacheサーバーがどちらも80番ポートで待機しているのでどちらへのアクセスなのか判別できません。

もし同じ物理マシンで複数のwebサーバーを起動させるなら最低でも以下が必要かと思います。

  • webサーバーB(Docker)はコンテナの待機ポートを8080とし80番ポートへフォワーディングさせる設定にする
  • webサーバーB(Docker)のホスト名をwww2などホストマシンと被らないように設定する
  • 内向きDNSサーバーを立ててアクセスされたホスト名で物理マシンへのアクセスポートを変更する

参考にした記事
https://qiita.com/hacoten/items/0fb1a44390e1af35b50c

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる