Докер с Монго и Экспресс

Прежде всего, поблагодарите за чтение моего вопроса и постарайтесь помочь мне и извиниться за мой английский.

Я пытаюсь запустить докер с проектом экспресс-сервера и Монго, но собираю Dockerfile отлично, но я делаю:

docker logs -f name

и показать следующую ошибку:

/usr/local/bin/docker-entrypoint-sh line 340: exec: npm not found

И я думаю, что mongodb не работает

Почему не распознает npm, если я добавляю узел? Как запустить npm и запустить mongo? Я использую Ubuntu 17.10

Вот мой Dockerfile:

# Install Node 
FROM node:latest

# Install Mongo
FROM mongo:4.0.0-xenial

# Author
MAINTAINER MachineGun

# Create user Ubuntu 17.10 (64 bits)
RUN adduser --disabled-login dockeruser

# Work Directory
WORKDIR /home/expressserver

# Copy express project to docker
COPY expressserver expressserver

# Defaul user
USER dockeruser

# Config cointainer PORT:
# MongoDB listening on port: 27017
# Server listening on port: 8080
EXPOSE 27017 8080

# Exec MongoDB
CMD [mongo]

# Exec server with custom npm start 
CMD ["npm", "run", "start:dev"]

Также в app.js я использую mongoose со следующими uri: mongodb://localhost:27017/ExpressServer, все нормально?

mongoose.connection.openUri('mongodb://localhost:27017/ExpressServer', { useNewUrlParser: true }, (err, res) => {

    if (err) {
        console.log('Error: Database not running on port 27017: \x1b[31m%s\x1b[0m', 'offline');
        // console.log('throw err: ', err);
        throw err;
    }
    console.log('Database running on port 27017: \x1b[32m%s\x1b[0m', 'online');
});

1 ответ

Я решил проблему:D Большое спасибо:D

Наконец-то я использовал docker compose...

Вот мой docker-compose.yml:

version: '2'

services:
  server: 
    container_name: expressserver
    build: ./ 
    ports:
      - "8080:8080"
    links:
      - mongo

  mongo: 
    container_name: mongoDB
    image: mongo:latest
    volumes:
      - /var/lib/mongodb:/data/db
    ports:
      - "27017:27017"
    command: mongod --port 27017

Вот мой Dockerfile:

FROM node:carbon

MAINTAINER MachineGun

RUN adduser --disabled-login dockeruser

WORKDIR /home/dockeruser

COPY expressserver expressserver

WORKDIR /home/dockeruser/expressserver

RUN npm install

USER dockeruser

EXPOSE 8080 27017
CMD ["npm", "start"]

И в моем app.js для связи с мангустом:

const options = {
    autoIndex: false, // Don't build indexes
    reconnectTries: 30, // Retry up to 30 times
    reconnectInterval: 500, // Reconnect every 500ms
    poolSize: 10, // Maintain up to 10 socket connections
    // If not connected, return errors immediately rather than waiting for reconnect
    bufferMaxEntries: 0
 };


// Database connection
const connectWithRetry = () => {
    mongoose.connect("mongodb://mongo/expressdb", options)
    .then(()=>{
        console.log('Database running on port 27017: \x1b[32m%s\x1b[0m', 'online')
    })
    .catch( (err) => {
        console.log('MongoDB connection unsuccessful on port 27017: \x1b[31m%s\x1b[0m', 'offline');
        console.log('Retry after 5 seconds.');
        setTimeout(connectWithRetry, 5000)
    });
}
connectWithRetry();
Другие вопросы по тегам