[解決済み] コンテナ型 Node サーバに server.listen(port, '127.0.0.1') でアクセスできない。
2023-08-02 14:16:20
質問
Dockerで簡単なNodeサーバを立ち上げてみました。
Dockerファイル
FROM node:latest
RUN apt-get -y update
ADD example.js .
EXPOSE 1337
CMD node example.js
example.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n'+new Date);
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
次に、イメージを構築します。
$ docker build -t node_server .
今度はコンテナで実行
$ docker run -p 1337:1337 -d node_server
$ 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70
コンテナが動作していること、ポートがマッピングされていることを確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5909e87302ab node_server "/bin/sh -c 'node exa" 7 seconds ago Up 6 seconds 0.0.0.0:1337->1337/tcp grave_goldberg
では、コンテナにアタッチして、中でサーバーが動作していることを確認してみましょう。
$ docker exec -it 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70 /bin/bash
そして、コンテナのコマンドラインには、次のように入力します。
root@5909e87302ab:/# curl http://localhost:1337
Hello World
Mon Feb 15 2016 16:28:38 GMT+0000 (UTC)
良さそうでしょ?
問題点
ホスト上で同じcurlコマンドを実行すると(あるいはブラウザでhttp://localhost:1337)、何も表示されません。
コンテナとホスト間のポートマッピングが機能しない理由について何か思い当たることはありますか?
すでに試したこと
-
を使って実行する
--expose 1337
フラグ
どのように解決するのですか?
ポートは正しく公開されていますが、サーバーが接続をリッスンしているのは
127.0.0.1
にあるコネクションをリッスンしています。
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n'+new Date);
}).listen(1337, '127.0.0.1');
このようにサーバーを動かす必要があります。
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n'+new Date);
}).listen(1337, '0.0.0.0');
127.0.0.1ではなく、0.0.0に注意してください。
関連
-
[解決済み] カーネルソースプロジェクトのinclude/uapiに含まれるもの
-
[解決済み] TCPのフロー制御と輻輳制御の違いは何ですか?
-
[解決済み] ライブDockerコンテナでポートを公開する
-
[解決済み】ポート番号を指定したscp
-
[解決済み】アクティブFTPとパッシブFTPの違いは何ですか?
-
[解決済み】Dockerコンテナにホストポートを転送する
-
[解決済み】SCTPがあまり使われていない/知られていない理由
-
[解決済み] ルートドメインCNAMEの制限を克服するには?
-
[解決済み] 内部アプリケーションに最適なTCPポート番号の範囲【終了しました
-
[解決済み] Dockerコンテナ間で "ホスト名 "を介して通信する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TCPのフロー制御と輻輳制御の違いは何ですか?
-
[解決済み] localhost:8080とはどういう意味ですか? [クローズド]です。
-
[解決済み】TCPの代わりにUDPを使用することが適切なのはどんな場合ですか?[クローズド]
-
[解決済み】インターネット上で最大の安全なUDPパケットサイズとは?
-
[解決済み] ルートドメインCNAMEの制限を克服するには?
-
[解決済み] 内部アプリケーションに最適なTCPポート番号の範囲【終了しました
-
[解決済み] ビデオストリームにおけるTCPとUDPの比較
-
[解決済み] VagrantでRAMを増設し、ホストオンリーネットワークを設定するには?
-
[解決済み] ネットワークバイトオーダーはなぜビッグエンディアンと定義されているのですか?[クローズド]
-
[解決済み] PACKETSとFRAMESの違いについて