2014-10-31 2 views
10

지난 이틀 동안 나는 도커와 문제를 겪고 있는데 그것을 얻을 수있다. 도커 문서에 따라 컨테이너가 연결을 수신 대기하는 포트를 EXPOSE으로 노출 할 수 있습니다. 여태까지는 그런대로 잘됐다!Docker EXPOSE. 그것을 얻을 수 없다

내 응용 프로그램이 포트 8080에서 수신 대기하는 경우 내 도커 컨테이너를 EXPOSE 8080으로 노출하고 docker run -p 80:8080으로 주 호스트의 포트 80에 바인드해야합니다.

# DOCKER-VERSION 0.0.1 

FROM ubuntu:14.10 

# make sure apt is up to date 
RUN apt-get update 

# install nodejs and npm 
RUN apt-get install -y nodejs-legacy npm git git-core 

ADD package.json /root/ 
ADD server.js /root/ 

# start script 
ADD start.sh /root/ 
RUN chmod +x /root/start.sh 

EXPOSE 8080 

CMD ./root/start.sh 

그리고 내 start.sh 그냥 & npm install & node server.jscd /root/을 runan :

여기 내 Dockerfile입니다. docker build -t app1 . 그리고 난 내 고정 표시기를 시작하는 방법 : docker run -it -p 80:8080 --name app1 app1 정말 유선은 무엇

, 이것은 아니다

다음
var express = require('express'); 

// Constants 
var PORT = 8080; 

// App 
var app = express(); 
app.get('/', function (req, res) { 
    res.send('Hello world\n'); 
}); 

app.listen(PORT); 
console.log('Running on http://localhost:' + PORT); 

내가 내 고정 표시기 이미지를 구축하는 방법입니다

나는 간단한 표현 앱 nodejs있어 일. 작동하게하려면 EXPOSE 8080EXPOSE 80으로 변경해야합니다. 나는 그것을 얻지 않는다.

설명이 있으십니까? 읽기

감사합니다, 톰 당신의 nodejs 응용 프로그램에서

+0

이것은 구성상의 문제이며, 항상 그런 유형의 포트 매핑을 사용합니다. "작동하지 않음"은 충분한 정보가 아닙니다. 포트가 호스트에서 열려 있습니까? 똑바로 세우면 어떻게 될까요? -p 8080 : 8080? – user2105103

+0

"작동하지 않는다"는 말은, 메인 호스트에서 내 컨테이너를 요청한 경우에도 포트 80의 말풍선이나 브라우저를 사용하여 내 컨테이너에 연결할 수 없다는 것을 의미합니다. "-p 8080 : 8080"을 사용하면 아무 것도 바뀌지 않습니다. –

답변

26

, 당신은 포트 PORT에 루프백 인터페이스에 접속을 대기 서버를 시작 nodejs를 알려주는 명령어 app.listen(PORT); 있습니다. 결과적으로 응용 프로그램은 localhost (컨테이너 자체)에서 시작된 연결 만 볼 수 있습니다.

app.listen(PORT, "0.0.0.0"); 

이 방법은 연결이 도커 컨테이너 외부에서 발생하는 표시됩니다

당신은 포트 PORT에 모든 인터페이스에서 청취 할 응용 프로그램을 말할 필요가있다.

+0

고마워, 이제 알겠다;) –

+0

그것은 나에게 효과가 없었다. : –

+0

nodejs 명령을 실행할 때 줄 끝 부분에 --production param을 넣어야했습니다.이 param + tip으로 이제 작동합니다. –

관련 문제