Приложение nodejs вышло с кодом 0, когда docker-compose up - PullRequest
0 голосов
/ 01 июля 2018

Я сталкиваюсь с ошибкой ниже при запуске docker-compose up

nginx_1       | 2018/07/03 06:54:17 [emerg] 1#1: host not found in upstream "admin:1123" in /etc/nginx/nginx.conf:19
nginx_1       | nginx: [emerg] host not found in upstream "admin:1123" in /etc/nginx/nginx.conf:19
nginx_1 exited with code 1

докер-compose.yml

version: "2"

volumes: 
  mongostorage:  

services:  
  app:
    build: ./app
    ports:
      - "3000"
    links:
      - mongo
      - redis

    volumes:
      - ./app:/var/www/app
      - /var/www/app/node_modules

  adminmongo:
    build: ./adminMongo
    ports:
      - "4455"
    links:
      - mongo    
    command: node app.js

  admin:
    build: ./admin
    ports:
      - "1123"
    links:
      - mongo
      - redis
    command: node admin_app.js

  nginx:
    build: ./nginx
    ports:
      - "80:80"
      - "1123:1123"
      - "4455:4455"
    links:
      - app:app
      - admin:admin

  mongo:
    image: mongo:2.4
    environment:
      - MONGO_DATA_DIR=/data/db
    volumes:
      - mongostorage:/data/db
    ports:
      - "27017:27017"

  redis:
    image: redis
    volumes:
      - ./data/redis/db:/data/db
    ports:
      - "6379:6379"    

Dockerfile для приложения

FROM node:9.8
RUN mkdir -p /var/www/app
WORKDIR /var/www/app
COPY . /var/www/app
RUN npm install -g gulp pm2 notify-send
RUN npm install 
CMD ["pm2-docker", "./bin/www"]

dockerfile для администратора

FROM node:9.8
RUN mkdir -p /var/www/sibkladmin
WORKDIR /var/www/sibkladmin
COPY . /var/www/sibkladmin
RUN npm install -g gulp pm2 bcrypt
RUN npm install 

dockerfile для nginx

FROM nginx:latest

EXPOSE 80
EXPOSE 1123
EXPOSE 4455

COPY nginx.conf /etc/nginx/nginx.conf

nginx.conf

events {
  worker_connections  1024;
}

http{

    upstream app.local{
        least_conn;
        server app:3000 weight=10 max_fails=3 fail_timeout=30s;
    }

    upstream app.local:4455{
        least_conn;
        server adminmongo:4455 weight=10 max_fails=3 fail_timeout=30s;
    }

    upstream app.local:1123{
        least_conn;
        server admin:1123 weight=10 max_fails=3 fail_timeout=30s;
    }



    server {
        listen 80;

        server_name app.local;

        location / {
            proxy_pass http://app.local;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

    server {
        listen 1123;

        server_name app.local:1123;

        location / {
            proxy_pass http://app.local:1123;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

    server {
        listen 4455;

        server_name app.local:4455;

        location / {
            proxy_pass http://sibklapp.local:4455;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
}

Обновлено:

Ошибка, полученная после сборки docker-compose

npm ERR! path /var/www/admin/node_modules/bcrypt/node_modules/abbrev
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename
npm ERR! enoent ENOENT: no such file or directory, rename '/var/www/admin/node_modules/bcrypt/node_modules/abbrev' -> '/var/www/admin/node_modules/bcrypt/node_modules/.abbrev.DELETE'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-07-05T10_03_43_640Z-debug.log
ERROR: Service 'admin' failed to build: The command '/bin/sh -c npm install' returned a non-zero code: 254

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Можете ли вы попробовать:

NGINX dockerfile

Изменение:

COPY nginx.conf /etc/nginx/nginx.conf

до

COPY nginx.conf /etc/nginx/nginx.conf.d

Удалите EXPOSE порты без необходимости выставлять порты.

Создать файл

Обновить составной файл до:

version: "2"

volumes: 
  mongostorage:  

services:  
  app:
    build: ./app
    ports:
      - "3000:3000"
    links:
      - mongo
      - redis
    volumes:
      - ./app:/var/www/app
      - /var/www/app/node_modules
    command: node app.js

  adminmongo:
    build: ./adminMongo
    ports:
      - "4455:4455"
    links:
      - mongo    
    volumes:
      - ./adminMongo:/var/www/adminMongo
      - /var/www/adminMongo/node_modules
    command: node app.js

  admin:
    build: ./admin
    ports:
      - "1123:1123"
    links:
      - mongo
      - redis
    volumes:  
      - ./admin:/var/www/admin
      - /var/www/admin/node_modules
    command: node admin_app.js

  nginx:
    build: ./nginx
    links:
      - app:app
      - admin:admin

  mongo:
    image: mongo:2.4
    environment:
      - MONGO_DATA_DIR=/data/db
    volumes:
      - mongostorage:/data/db
    ports:
      - "27017:27017"

  redis:
    image: redis
    volumes:
      - ./data/redis/db:/data/db
    ports:
      - "6379:6379"    

Примечание Я создал простое приложение узла hello world для тестирования, вам нужно обновить command:, чтобы оно соответствовало тому, что у вас есть в package.json

Также Перед запуском приложения выполните следующие команды для очистки любых старых контейнеров / сетей:

    docker-compose kill
    docker-compose down
    docker network prune
    docker volume prune

Для запуска сервисов Запустите:

docker-compose build

проб излишним, но убедится, что вы не используете старые контейнеры

docker-compose up --force-recreate

Локальный тестовый выход

    mongo_1       | Wed Jul  4 21:50:35.835 [initandlisten] waiting 
    for connections on port 27017

    mongo_1       | Wed Jul  4 21:50:35.835 [websvr] admin web console 
    waiting for connections on port 28017

    app_1         | app listening on port 3000!
    admin_1       | admin app listening on port 1123!
    adminmongo_1  | AdminMongo app listening on port 4455!

    redis_1       | 1:M 04 Jul 21:50:26.523 * Running mode=standalone, 
    port=6379.
0 голосов
/ 02 июля 2018

Эта проблема указывает на то, что вы не установили node_modules внутри Dockerfile, используя npm install, или перезаписали их с хоста, используя оператор COPY . /src.

Поскольку используемый вами модуль является собственным модулем, его необходимо скомпилировать в образе докера, а не просто скопировать из другого места, так как он не будет совместим до тех пор, пока версия Host OS и версия Image OS не будут одинаковыми.

...