Ошибка сброса соединения при попытке достичь Docker Express API Endpoint в Windows 10 - PullRequest
0 голосов
/ 24 февраля 2019

Я использую Docker для Windows в Windows 10. Я новичок в Docker и создал службу Express / Mongo API, следуя этому руководству .

Я запускаю образ с помощью следующей команды:
docker-compose -f docker/docker-compose.yml up -d

Контейнер раскручивается без ошибок.Однако, когда я пытаюсь поразить API, я просто получаю сообщения «сброс соединения».Я пробовал следующее:

  • curl http://localhost:80
  • curl http://localhost:80/api/documents
  • curl http://127.0.0.1:80
  • curl http://127.0.0.1:80/api/documents

Я попытался запустить образ nginx и запустить его на 80-м порту, а затем нажать curl http://localhost:80, и это сработало.

docker.compose.yml file

version: '3'
services:
  backend:
    build: 
      context: ../
      dockerfile: docker/Dockerfile.production 
      args:
        port: ${PORT}
    env_file:
      - ../.env
    restart: always
    ports:
      - "${PORT}:${PORT}"
    environment:
      WAIT_HOSTS: database:27017
  database:
    image: mongo:4.0
    env_file:
      - ../.env
    expose:
      - 27017
    command: "mongod --smallfiles --logpath=${MONGO_LOG_FILE}"

dockerfile

FROM node:10.12.0-alpine
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.2.1/wait /wait
RUN chmod +x /wait
WORKDIR /home/nodejs/app
ENV NODE_ENV prod
COPY package*.json ./
RUN npm install --only=production
ARG port=80
EXPOSE $port
COPY . ./
CMD /wait && node index.js

index.js

const express = require('express');
const bodyParser = require('body-parser');
const MongoClient = require('mongodb').MongoClient;

const dbName = process.env.NODE_ENV === 'dev' ? 'database-test' : 'database';
const url = `mongodb://${process.env.MONGO_INITDB_ROOT_USERNAME}:${process.env.MONGO_INITDB_ROOT_PASSWORD}@${dbName}:27017?authMechanism=SCRAM-SHA-1&authSource=admin`;
const options = {
  useNewUrlParser: true, 
  reconnectTries: 60, 
  reconnectInterval: 1000
}

const routes = require('./routes/routes.js');
const port = process.env.PORT || 80;
const app = express();
const http = require('http').Server(app);

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use('/api', routes);
app.use((req, res) => {
  res.status(404);
})

MongoClient.connect(url, options, (err, database) => {
  if (err) {
    console.log(`FATAL MONGODB CONNECTION ERROR: ${err}:${err.stack}`);
    process.exit(1);
  }
  app.locals.db = database.db('api');
  http.listen(port, () => {
    console.log("Listening on port " + port);
    app.emit('APP_STARTED');
  })
})

module.exports = app;

Любая помощь и предложения для вещей впопытка будет оценена.


Обновление
Если я раскручиваю mongodb отдельно, используя docker run -d -p 27017:27017 mongo, а затем запускаю мое экспресс-приложение с node index.js, кажется, все работаетхорошо.Кажется, проблема в том, как я использую docker-compose.Кажется, что внутреннее изображение продолжает перезапускаться снова и снова, когда я смотрю на изображения через docker ps

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