В последние два дня у меня проблемы с докером, и я могу это получить. Следуя документу docker, вы можете открыть порты, на которых контейнер будет прослушивать соединения с EXPOSE
. Пока что так хорошо!
Если мое приложение прослушивает порт 8080, я должен открыть контейнер docker с помощью EXPOSE 8080
и привязать его к порту 80 основного узла с помощью docker run -p 80:8080
.
Вот мой файл Docker:
# 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
просто runan cd /root/
и npm install
и node server.js
.
У меня есть простое приложение express nodejs:
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);
Вот как я создаю изображение докеры: docker build -t app1 .
И как я запускаю свой докер: docker run -it -p 80:8080 --name app1 app1
Что действительно подключено, это не работает. Чтобы заставить его работать, мне нужно изменить EXPOSE 8080
на EXPOSE 80
. Я не понимаю.
Любое объяснение?
Спасибо за чтение, Том