簡體   English   中英

在 docker(Windows 10)上運行節點時,每個 listen() 都會收到兩個響應

[英]When running node on docker (windows 10) I'm getting two responses for each listen()

我正在關注Kubernetes in Action (Manning Books) 的文本。 第 28 頁左右是在 Docker 上運行 Node 的練習。 當我使用瀏覽器運行代碼時,每個瀏覽器請求都會收到兩個響應。

我正在使用 WSL2 后端為 Windows 運行 Windows 10 和 Docker。

這是app.js的代碼:

// Sample program for "Kubernetes in Action", page 28
const http = require('http');
const os = require('os');

// Console output doesn't show when the "docker run ... -d ..." option is used.
console.log("Kubia server starting...");

// For some reason the handler is called twice for each localhost:8080
var handler = function(request, response) {
    var dt = new Date();
    var dtString = dt.toISOString();
    console.log("Received request from " + request.connection.remoteAddress + " at " + dtString);
    response.writeHead(200);
    response.end("You've hit " + os.hostname() + " at " + dtString + "\n");
};

var www = http.createServer(handler);
www.listen(8080);

這是我的 Dockerfile:

FROM node:12.18.1
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]

在該目錄中,我構建圖像:

docker build -t kubia .

我運行代碼:

docker run --name kubia-container -p 8080:8080 kubia

從瀏覽器我得到:

You've hit 713d0aa4de7a at 2022-09-01T13:28:11.903Z

但我的控制台說:

Kubia server starting...
Received request from ::ffff:172.17.0.1 at 2022-09-01T13:28:11.903Z
Received request from ::ffff:172.17.0.1 at 2022-09-01T13:28:11.929Z

當然,瀏覽器接受它得到的第一個響應並忽略任何后續響應。 但是為什么服務器會為 localhost:8080 請求運行兩次呢?

上午 9:42 編輯:當我使用 CMD 並在其中運行 curl 時,每個 curl 請求都會通過我的處理程序進行一次調用。 我得到兩個用於瀏覽器調用,但一個用於 curl。 也許這是一個瀏覽器問題?

通過添加console.log('url', request.url)我可以看到我的瀏覽器正在調用 /favicon.ico 作為第二個請求。

在此處輸入圖像描述

這似乎是一個常規問題/問題為什么當我從 ASP.NET MVC 提供文件時,Chrome 會搜索我的 favicon.ico?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM