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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Docker

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

Q&A

解決済

1回答

12923閲覧

VM上でDockerを用いてnginxを起動しても接続がリセットされるエラー

jgvkmea

総合スコア25

CentOS

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Docker

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

0グッド

0クリップ

投稿2020/02/20 05:30

vagrantからVirtualBoxを使ってCentOS7でVMを立てています。
そこでDockerを使ってnginxを起動し、テスト画面を表示しようとしています。

docker run -d --name nginx_test -p 8080:80 nginx

を実行し、nginxを起動したのですが、

curl localhost:8080

でアクセスしても、

curl: (56) Recv failure: Connection reset by peer

と返ってきて、HTMLが返ってきません。
そこで自分なりに調べ、こちらのサイトを参考に

docker run -d --name nginx_test --network=host nginx

を実行したところ、

curl localhost:80

でアクセスできるようになりました。

ただ、これがなぜできるようになったのかがわかりません。
上の状態だとなぜアクセスできなかったのでしょうか?
-p 8080:80 でVMの8080ポートのアクセスをdockerの80番ポート(nginx)に転送するよう設定しているという理解なのですが、これは間違っているのでしょうか?
また今後、Dockerを使って開発環境を構築しようと考えているのですが、
HTMLを返すには今回の設定で行えば問題ないのでしょうか?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

-p 8080:80 でVMの8080ポートのアクセスをdockerの80番ポート(nginx)に転送するよう設定しているという理解なのですが、これは間違っているのでしょうか?

その認識で良いと思います。

さらに言うと、VMの中にDockerホスト環境が入るので、2つのルータを経由してインスタンスにアクセスしているイメージです。
VMからDockerホスト、Dockerホストからインスタンスにどのようにアクセスするかを考える必要があります。dockerコマンドで設定したのは、Dockerホストからインスタンスへのアクセスになります。

--network=hostを利用してアクセスできるようになったという現象から、
VMからDockerホストには80番が空いているのではないかと思います。
Docerホストからインスタンスに対して、8080から80にアクセスしようとして(ポートを開けて)も、その前のVM->Dockerホストが80しか空いていなければ、アクセスできません。

ただ、エラーメッセージがConnection reset by peerとなっているため、ポートが空いていないのではなく、別のサーバが利用していて、接続処理中にプロトコルが違うために切断されている可能性があります。これは、VM側なのか、ホストPCなのかはわかりません。

tcpdumpなどを利用してパケットキャプチャを行うことで、どの経路でresetされたのかがわかるかと思われます。
参考:https://netwiz.jp/reset-packet/

投稿2020/03/10 09:41

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jgvkmea

2020/03/11 13:51

なるほど! VMからDockerへは、VM→DockerホストとDockerホスト→インスタンスの2段階があるんですね。 そこの認識から違っていました。。 パケットキャプチャやってみます。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問