“本地主机没有发送数据。ERR_EMPTY_RESPONSE”和“curl:(52)来自服务器的空回复”

Alw*_*ner 6 node.js docker dockerfile angular

当我尝试访问 Docker 容器外部时,我收到空数据并出现下面提到的错误。我对 Docker 容器内的curl 和wget 命令没有任何问题。该容器基于 Angular JS 镜像。

\n\n

“本地主机没有发送数据。ERR_EMPTY_RESPONSE”和“curl:(52)来自服务器的空回复”

\n\n

请帮忙。

\n\n

对不起!忘记发布实际代码。这是我的 Dockerfile 和 package.json 文件。

\n\n

包.json

\n\n
    {\n  "name": "angularjs-project\xe2\x80\x9d,\n  "version": "0.0.0",\n  "license": "MIT",\n  "scripts": {\n    "ng": "ng",\n    "start": "ng serve -H 0.0.0.0",\n    "build": "ng build",\n    "test": "ng test",\n    "lint": "ng lint",\n    "e2e": "ng e2e"\n  },\n  "private": true,\n  "dependencies": {\n    "@angular/animations": "^4.3.6",\n    "@angular/common": "^4.2.4",\n    "@angular/compiler": "^4.2.4",\n    "@angular/core": "^4.2.4",\n    "@angular/forms": "^4.2.4",\n    "@angular/http": "^4.2.4",\n    "@angular/platform-browser": "^4.2.4",\n    "@angular/platform-browser-dynamic": "^4.2.4",\n    "@angular/router": "^4.2.4",\n    "core-js": "^2.4.1",\n    "font-awesome": "^4.7.0",\n    "primeng": "^4.1.3",\n    "rxjs": "^5.4.2",\n    "zone.js": "^0.8.14"\n  },\n  "devDependencies": {\n    "@angular/cli": "1.3.2",\n    "@angular/compiler-cli": "^4.2.4",\n    "@angular/language-service": "^4.2.4",\n    "@types/jasmine": "~2.5.53",\n    "@types/jasminewd2": "~2.0.2",\n    "@types/node": "~6.0.60",\n    "codelyzer": "~3.1.1",\n    "jasmine-core": "~2.6.2",\n    "jasmine-spec-reporter": "~4.1.0",\n    "karma": "~1.7.0",\n    "karma-chrome-launcher": "~2.1.1",\n    "karma-cli": "~1.0.1",\n    "karma-coverage-istanbul-reporter": "^1.2.1",\n    "karma-jasmine": "~1.1.0",\n    "karma-jasmine-html-reporter": "^0.2.2",\n    "protractor": "~5.1.2",\n    "ts-node": "~3.2.0",\n    "tslint": "~5.3.2",\n    "typescript": "~2.3.3"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

Dockerfile

\n\n
    FROM node:6\nRUN mkdir -p /angularjs-sample\nADD . /angularjs-sample\nWORKDIR /angularjs-sample\nRUN cd /angularjs-sample\n\nRUN npm cache clean\nRUN npm install -g @angular/cli\nRUN npm install\nRUN npm update\nEXPOSE 4200\nCMD ["ng", "serve"]\n
Run Code Online (Sandbox Code Playgroud)\n

Jef*_*wab 10

CMD ["ng", "serve", "--host=0.0.0.0"]\n
Run Code Online (Sandbox Code Playgroud)\n

当 HTTP 客户端(例如 Web 浏览器)(或在本例中为curl)发送 HTTP 请求时,服务器需要 client\xe2\x80\x99s IP 地址,以便知道将响应发送到哪里。当您运行本地开发服务器时,它会检查该 IP 地址,甚至不会响应来自 127.0.0.1 (localhost) 的请求。这可以防止您网络上的其他人(例如,坐在同一家星巴克)使用开发服务器来攻击您的盒子。

\n

当您在来宾容器或虚拟机中运行开发服务器并在主机上运行客户端 (curl) 时,服务器会看到不同的 IP 地址,并拒绝响应。大多数服务器允许您指定哪些 IP 地址是有效客户端的掩码。0.0.0.0 表示 fugetaboutit,接受所有客户端 IP。它让保镖休息一晚。

\n


Soh*_*han 1

我建议的理想方法是在创建时将主机 IP 地址绑定到容器。您不应该从 docker 文件启动应用程序的运行。创建容器,与主机绑定并编写脚本来启动应用程序

你可以这样做,

docker run -d -p 4545:8553--name my-container my-image my-command
Run Code Online (Sandbox Code Playgroud)

其中“ 8553 ”可以是您的应用程序默认内部端口,与“ 4545 ”外部端口合并