如果我首先创建一个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错误,所以我最终尝试了解这个荒谬的场景什么都失败了。
答案 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 myApp
在docker run -p 81:80 -P -d myApp
期间无效。