Я использую 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