Docker-compose:ERR_EMPTY_RESPONSE

如果我通过首先创build映像然后运行它( docker build --rm -t myApp + docker run -p 80:80 -P -d myApp )启动Docker容器,一切正常。

但是,当我使用Docker-compose并访问localhost时,浏览器返回ERR_EMPTY_RESPONSE错误(不是典型的:“连接被拒绝”)。

我错在哪里?

docker工人,compose.yml:

 version: '2' services: myApp: build: myApp ports: - "80:8000" 

/对myApp / Dockerfile:

 FROM fedora-nodeJS ADD app.js / EXPOSE 8000 CMD node app 

/myApp/app.js:

 var http = require('http'); var PORT = 8000; var ADDR = '0.0.0.0'; http.createServer(function(req, res) { res.writeHead(301, { Location: 'http://stackoverflow.com' }); res.end(); }).listen(PORT,ADDR); 

::我知道用Docker-compose只启动一个容器是没有意义的,但是在尝试启动几个容器时我有相同的ERR_EMPTY_RESPONSE错误,所以最后我想到了这个荒谬的场景,试图了解什么是失败。

在命令中,我可以看到

 docker run -p 80:80 -P -d myApp 

你正在暴露内部端口80,但在

泊坞窗,compose.yml

你正在暴露内部端口8000

 ports: - "80:8000" 

这是一个错字吗? 您实际上想要为您的应用公开哪个端口?

正如@emme指出的那样,这可能是你的错误。

对于任何有相同问题但100%肯定他们的端口configuration是正确的,这可能是您的防病毒问题。 我的公司在我的Mac上安装了ESET端点防病毒软件,默认情况下,防病毒软件阻止访问localhost:80 。 虽然服务器可以绑定到端口80,但在启用“启用HTTP检查”(在“Web访问保护”下)的情况下,不会有客户端连接到此服务器。

听起来像一个愚蠢的答案,但我失去了一个下午搞清楚为什么docker run -p 80:80 -P -d myApp不会工作,而docker run -p 81:80 -P -d myApp会。