Docker-compose:ERR_EMPTY_RESPONSE

时间:2017-01-17 23:35:13

标签: docker docker-compose

如果我首先创建一个Docker容器,然后运行它(docker build --rm -t myApp + docker run -p 80:80 -P -d myApp),那么一切正常。

但是,当我使用Docker-compose并访问localhost时,浏览器会返回ERR_EMPTY_RESPONSE错误(不是典型的错误:" Connection refused")。

我哪里错了?

多克尔-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错误,所以我最终尝试了解这个荒谬的场景什么都失败了。

2 个答案:

答案 0 :(得分:3)

在命令中,我可以看到

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

您正在公开内部端口80,但是在

  

搬运工-compose.yml

您正在公开内部端口8000

ports:
   - "80:8000"
这是一个错字吗? 您实际想要为您的应用公开哪个端口?

答案 1 :(得分:1)

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

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

听起来像是一个愚蠢的回答,但我失去了一个下午,弄清楚为什么docker run -p 80:80 -P -d myAppdocker run -p 81:80 -P -d myApp期间无效。