Node.js &引用;localhost没有';不要发送数据。ERR“u EMPTY”u RESPONSE“;及;curl:(52)来自服务器的空回复;
当我尝试访问Docker容器外部时,我得到的是带有以下错误的空数据。我对Docker容器中的curl和wget命令没有任何问题。该容器基于角度JS图像 “localhost未发送数据。ERR_EMPTY_RESPONSE”和“curl:(52)来自服务器的空回复” 请帮忙 对不起!忘记发布实际代码。这里是我的Dockerfile和package.json文件 package.jsonNode.js &引用;localhost没有';不要发送数据。ERR“u EMPTY”u RESPONSE“;及;curl:(52)来自服务器的空回复;,node.js,angular,docker,dockerfile,Node.js,Angular,Docker,Dockerfile,当我尝试访问Docker容器外部时,我得到的是带有以下错误的空数据。我对Docker容器中的curl和wget命令没有任何问题。该容器基于角度JS图像 “localhost未发送数据。ERR_EMPTY_RESPONSE”和“curl:(52)来自服务器的空回复” 请帮忙 对不起!忘记发布实际代码。这里是我的Dockerfile和package.json文件 package.json { "name": "angularjs-project”, "version": "0.0.0
{
"name": "angularjs-project”,
"version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve -H 0.0.0.0",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "^4.3.6",
"@angular/common": "^4.2.4",
"@angular/compiler": "^4.2.4",
"@angular/core": "^4.2.4",
"@angular/forms": "^4.2.4",
"@angular/http": "^4.2.4",
"@angular/platform-browser": "^4.2.4",
"@angular/platform-browser-dynamic": "^4.2.4",
"@angular/router": "^4.2.4",
"core-js": "^2.4.1",
"font-awesome": "^4.7.0",
"primeng": "^4.1.3",
"rxjs": "^5.4.2",
"zone.js": "^0.8.14"
},
"devDependencies": {
"@angular/cli": "1.3.2",
"@angular/compiler-cli": "^4.2.4",
"@angular/language-service": "^4.2.4",
"@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "~3.1.1",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0",
"karma-chrome-launcher": "~2.1.1",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~3.2.0",
"tslint": "~5.3.2",
"typescript": "~2.3.3"
}
}
Dockerfile
FROM node:6
RUN mkdir -p /angularjs-sample
ADD . /angularjs-sample
WORKDIR /angularjs-sample
RUN cd /angularjs-sample
RUN npm cache clean
RUN npm install -g @angular/cli
RUN npm install
RUN npm update
EXPOSE 4200
CMD ["ng", "serve"]
我建议的理想方法是在创建容器时将主机ip地址绑定到容器。您不应该从docker文件启动应用程序的运行。创建容器,与主机绑定,并编写脚本以启动应用程序 你可以这样做
docker run -d -p 4545:8553--name my-container my-image my-command
其中“8553”可以是应用程序默认的内部端口,与“4545”外部端口绑定
CMD ["ng", "serve", "--host=0.0.0.0"]
当像web浏览器(或者在本例中是curl)这样的HTTP客户机发送HTTP请求时,服务器需要客户机的IP地址,以便知道在哪里发送响应。当您运行本地开发服务器时,它会检查该IP地址,甚至不会响应不是来自127.0.0.1(localhost)的请求。这使得你的网络上的其他人(比如,坐在同一家星巴克里)不会使用dev服务器来破解你的盒子
当您在来宾容器或VM中运行开发服务器,并在主机上运行客户机(curl)时,服务器会看到不同的IP地址,并拒绝响应。大多数服务器允许您指定哪些IP地址是有效客户端的掩码。0.0.0.0表示fugetaboutit,接受所有客户端IP。它让保镖可以休息一晚。@VijayKrishna,我希望你提供的链接能够解决这个问题。今天我已经通过了很多次链接来理解这个问题。你能告诉我为了解决这个问题,我需要用0.0.0.0更新Angular JS的哪个文件或位置吗?顺便说一句,如果这个问题很傻,请原谅我,因为我是Angular JS和Docker的新手。请发布您的dockerfile和package.json。请粘贴您使用dockerfile所做的详细步骤。如果容器内的进程仅侦听“localhost”,则只能从容器内访问它。确保进程正在侦听“任意”地址(即侦听
0.0.0.0
),以便它接受来自容器外部的连接@罗布,我错过了什么?我不清楚我应该做什么不同的事情。不要只是脱口而出代码。解释你在做什么。它如何回答这个问题?它做了什么来解决这个问题?我能得到对这个被接受的答案投反对票的理由吗?