Контейнер Docker недоступен - PullRequest
       10

Контейнер Docker недоступен

0 голосов
/ 27 февраля 2019

У меня есть приложение React / Nodejs, которое я пытаюсь развернуть в Digital Ocean с помощью Docker.Я создал Docker Droplet с 2 ГБ ОЗУ, клонировал проект и пытаюсь его запустить.

К настоящему времени я не получаю никаких журналов ошибок при построении образа и его запуске.Но, когда я пытаюсь получить к нему доступ, в браузере появляется сообщение об ошибке «Этот сайт недоступен».

Я создаю свое изображение так: docker build -t myImage .

Изапустить его и передать мои переменные env следующим образом:

docker run -p 80:3000 -e NODE_ENV="production" -e MONGO_URI="URI" -e SECRET_OR_KEY="KEY" myImage

Кажется, все работает нормально (сборка и запуск).Я получаю журнал, что мой mongodb подключен и сервер работает.Но на самом деле я не вижу приложение.

Это мой Dockerfile:

FROM node:11.10.0

WORKDIR /usr/src
RUN git clone https://github.com/repo.git

WORKDIR /usr/src/project

RUN npm install
WORKDIR /usr/src/project/client
RUN npm install
RUN npm run build

WORKDIR /usr/src/project

EXPOSE 80 3000

ENTRYPOINT npm run server

Я создал его на основе другого приложения, которое также работает в Digital Ocean.

А это мой server.js:

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const passport = require('passport');
const path = require('path');


//Route files
const users = require('./routes/api/users');
const fpsos = require('./routes/api/fpsos');
const bids = require('./routes/api/bids');
const news = require('./routes/api/news');

const app = express();

//Body parser middlewares
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json ());

//DB config
const db = require('./config/keys').mongoURI;
//Connect to MongoDB
mongoose
    .connect(db)
    .then(() => console.log('MongoDB connected'))
    .catch(err => console.log(err));

//Passport middleware
app.use(passport.initialize());

//Passport Config
require('./config/passport')(passport);

app.use('/api/users', users);
app.use('/api/news', news);
app.use('/api/fpso', fpsos);
app.use('/api/bid', bids);


// Server static assets if in production
if (process.env.NODE_ENV === 'production') {
    // Set static folder
    app.use(express.static('client/build'));

    app.get('*', (req, res) => {
        res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
    });
}

const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server running on port ${port}`))

Что мне здесь не хватает?Я ценю любую помощь.Заранее спасибо!

1 Ответ

0 голосов
/ 27 февраля 2019

Похоже, что у вас есть докер, прослушивающий порт, отличный (5000) от вашего приложения узла (3000), поэтому узел не будет возвращать какие-либо данные в браузер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...