【エラー】Docker内で立ち上げたサーバーのアクセスで「Empty reply from server」が発生した件
Dockerの立ち上げに関しては、
- Dockerfileというファイルを作成する
- ビルドしてDockerイメージを作成する
- Dockerイメージからコンテナを作成する
- コンテナに接続してログインする
という手順を行って、
上記をやってみたあとに、
- Dockerのイメージの確認
- Dockerのコンテナの確認
- Dockerのコンテナの停止と削除
などを行っていました。
これらを行う中で、
Dockerの中で立ち上げたサーバーにアクセスする際に、
「Empty reply from server」
が発生したので個人的にメモ。
Dockerの基本操作
Dockerfileなどを作るなどの基本操作に関しては、
以下にまとめているので、参照してください。
【簡易サンプル】Dockerの基本的な手順とコマンドサンプル
今回の事象が起きた環境構成
環境としては、
- サーバ(Dockerの外)はNginxで起動
- Nginxではproxyでポート指定(8080)
- Dockerの中では、ポート指定(10000)で起動
という形でサーバを動かしていました。
ちなみに、
Dockerの状況を確認すると以下の状況でした。
確認コマンド
docker ps
確認結果
$ docker ps
CONTAINER .... PORTS NAMES
111 .... 0.0.0.0:8080->10000/tcp, :::8080->10000/tcp test
エラー内容
エラー内容としては、
サーバーの中(Dockerの外)から、
curlコマンドで実行を確認すると、
確認コマンド
curl -l http://localhost:8080/test
確認結果
$ curl -l http://localhost:8080/test
curl: (52) Empty reply from server
という感じで、
「Empty reply from server」
というエラーが発生しました。
Dockerの中で、
「10000」というポートで立ち上げたサーバーの中で、
このポートにアクセスできるか確認すると、
$ curl -l http://localhost:10000/test
test ←これは検証で試した返却値
という形で、
問題なくレスポンスが返却されていました。
対応方法
解決方法としては、
Docker内で起動しているサーバーのホスト名を、
「localhost」ではなく「0.0.0.0」
に変更するとうまく動作しました。
Dockerの外から、
$ curl -l http://localhost:8080/test
curl: (52) Empty reply from server
というエラーになっていたものが、
$ curl -l http://localhost:10000/test
curl: (52) Empty reply from server
というレスポンスになっているので、
うまく挙動していることが確認できました。
スキルを使って、就職/転職/副業する時のサイト
プログラミングのスキルなどを、自分なりに高めた上で、
自分のスキルをアピールして就職や転職を行い、年収をあげるか、
副業という形で、年収にプラスアルファの稼ぎを増やすことはできます。
まずはできる範囲で取り組むことで、
少しずつ、経験値も増え、自分のスキルが収入につながるのでおすすめです。