2017-01-17 80 views
0

如果我通過首先創建映像並運行它來啓動Docker容器(docker build --rm -t myApp + docker run -p 80:80 -P -d myApp),則一切正常。但是,當我使用Docker-compose並訪問localhost時,瀏覽器返回ERR_EMPTY_RESPONSE錯誤(不是典型的:「連接被拒絕」),而是返回給我一個ERR_EMPTY_RESPONSE錯誤。Docker-compose:ERR_EMPTY_RESPONSE

我在哪裏錯了?

多克爾 - 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錯誤幾個容器,所以我結束了這個荒謬的場景試圖瞭解什麼是失敗。

回答

1

在命令中,我可以看到

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

,你是暴露內部端口80,但在

泊塢窗,compose.yml

你露出內部端口8000

ports: 
    - "80:8000" 

這是一個錯字嗎? 您真正想要爲您的應用公開哪個端口?

0

正如@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會。