Tech Sheets

Dockerで、ホストからcurlでアクセスするとEmpty reply from serverがでてしまう

最終更新日:2024-08-25

コンテナ起動時、-pをつけるとホストとコンテナ内のポートを繋ぐことができます。しかしコンテナ内でサーバーが指定したポートで起動しているにもかかわらず、ホスト側からcurlでリクエストを投げると「curl: (52) Empty reply from server」となることがあります。

何が原因?

コンテナ内で起動しているサーバーがlocalhost指定でListenしている可能性があります。

サーバーは起動時、ポート番号を指定しますが、同時にIPアドレスも指定することができます。例えばNode.jsだと次のような指定ができます。

var http = require("http");
var express = require('express');

var app = express()
app.get('/', function(req, res) {
    res.send("Hello World!");
});

var server = http.createServer(app)

console.log('start server at 8080')
// 127.0.0.1指定でListen
server.listen(8080, '127.0.0.1')

IPアドレス指定でListenした場合、そのIPアドレス以外からのリクエストは受け付けられません。もちろんホスト側からのcurlリクエストは127.0.0.1ではないため、「curl: (52) Empty reply from server」となってしまいます。

解決方法は?

コンテナ内でnginxなどのリバースプロキシを置き、コンテナ外からのリクエストをプロキシしてみましょう。

一覧に戻る