NodeJS Express Docker实例已退出,代码为0



目标

我的dockercompose.yml中有3个实例,我只能启动其中的2个实例,并且很难启动我的节点表示的第三个实例。


项目目录

.
├── Iconr
├── angular
│   ├── Dockerfile
│   ├── README.md
│   ├── dist
│   │   ├── css
│   │   │   └── style.css
│   │   ├── img
│   │   │   ├── external.png
│   │   │   ├── favicon.png
│   │   │   ├── footer_logo.png
│   │   │   └── logo.png
│   │   ├── index.html
│   │   └── js
│   │       ├── bundle.js
│   │       └── vendor.js
│   ├── docs
│   │   ├── app
│   │   │   ├── api.js
│   │   │   ├── app.config.js
│   │   │   ├── app.module.js
│   │   │   └── guide.js
│   │   ├── build
│   │   │   ├── index.html
│   │   │   ├── partials
│   │   │   │   ├── api
│   │   │   │   │   ├── common
│   │   │   │   │   │   ├── directive
│   │   │   │   │   │   │   └── app.html
│   │   │   │   │   │   ├── directive.html
│   │   │   │   │   │   ├── type
│   │   │   │   │   │   │   ├── AppController.html
│   │   │   │   │   │   │   └── AppSidebarController.html
│   │   │   │   │   │   └── type.html
│   │   │   │   │   ├── common.html
│   │   │   │   │   ├── components.auth
│   │   │   │   │   │   ├── service
│   │   │   │   │   │   │   └── AuthService.html
│   │   │   │   │   │   └── service.html
│   │   │   │   │   ├── components.auth.html
│   │   │   │   │   ├── components.contact
│   │   │   │   │   │   ├── directive
│   │   │   │   │   │   │   └── lengthCheck.html
│   │   │   │   │   │   ├── directive.html
│   │   │   │   │   │   ├── service
│   │   │   │   │   │   │   └── ContactService.html
│   │   │   │   │   │   ├── service.html
│   │   │   │   │   │   ├── type
│   │   │   │   │   │   │   └── ContactEditController.html
│   │   │   │   │   │   └── type.html
│   │   │   │   │   ├── components.contact.html
│   │   │   │   │   └── components.html
│   │   │   │   ├── api.html
│   │   │   │   ├── guide
│   │   │   │   │   └── howTo.html
│   │   │   │   └── guide.html
│   │   │   └── src
│   │   │       ├── api-data.js
│   │   │       ├── api.js
│   │   │       ├── app.config.js
│   │   │       ├── app.module.js
│   │   │       ├── guide-data.js
│   │   │       └── guide.js
│   │   ├── config
│   │   │   ├── index.js
│   │   │   ├── processors
│   │   │   │   ├── api-data.js
│   │   │   │   ├── guide-data.js
│   │   │   │   └── index-page.js
│   │   │   └── templates
│   │   │       ├── constant-data.template.js
│   │   │       ├── content.template.html
│   │   │       ├── indexPage.template.html
│   │   │       └── module.template.html
│   │   └── content
│   │       ├── api
│   │       │   └── index.md
│   │       └── guide
│   │           ├── howTo.md
│   │           └── index.md
│   ├── files
│   │   ├── default.conf
│   │   └── nginx.conf
│   ├── gulpfile.babel.js
│   ├── karma.conf.js
│   ├── mocks
│   │   └── firebase.mock.js
│   ├── npm-shrinkwrap.json
│   ├── package.json
│   ├── src
│   │   ├── app
│   │   │   ├── common
│   │   │   │   ├── app-footer.component.js
│   │   │   │   ├── app-footer.html
│   │   │   │   ├── app-header.component.js
│   │   │   │   ├── app-header.html
│   │   │   │   ├── app-pagination.html
│   │   │   │   ├── app-pagination.js
│   │   │   │   ├── app-sidebar.component.js
│   │   │   │   ├── app-sidebar.html
│   │   │   │   ├── app.component.js
│   │   │   │   ├── app.html
│   │   │   │   ├── app.module.js
│   │   │   │   ├── app.spec.js
│   │   │   ├── components
│   │   │   │   ├── auth
│   │   │   │   │   ├── auth-form
│   │   │   │   │   │   ├── auth-form.component.js
│   │   │   │   │   │   ├── auth-form.controller.js
│   │   │   │   │   │   ├── auth-form.html
│   │   │   │   │   │   └── auth-form.spec.js
│   │   │   │   │   ├── auth.module.js
│   │   │   │   │   ├── auth.spec.js
│   │   │   │   │   └── login
│   │   │   │   │       ├── login.component.js
│   │   │   │   │       ├── login.controller.js
│   │   │   │   │       ├── login.html
│   │   │   │   │       └── login.spec.js
│   │   │   │   ├── components.module.js
│   │   │   │   └── dashboard
│   │   │   │       ├── access-point-map
│   │   │   │       │   ├── access-point-map.component.js
│   │   │   │       │   └── access-point-map.html
│   │   │   │       ├── account-stats
│   │   │   │       │   ├── account-stats.component.js
│   │   │   │       │   └── account-stats.html
│   │   │   │       ├── dashboard.component.js
│   │   │   │       └── dashboard.html
│   │   │   ├── root.component.js
│   │   │   ├── root.html
│   │   │   └── services
│   │   │       ├── account.service.js
│   │   │       ├── auth.service.js
│   │   │       └── services.module.js
│   │   ├── img
│   │   │   ├── external.png
│   │   │   ├── favicon.png
│   │   │   ├── footer_logo.png
│   │   │   └── logo.png
│   │   ├── index.html
│   │   └── sass
│   │       ├── base
│   │       │   ├── _buttons.scss
│   │       │   ├── _forms.scss
│   │       │   ├── _headings.scss
│   │       │   ├── _list-group.scss
│   │       │   ├── _main.scss
│   │       │   ├── _media.scss
│   │       │   ├── _mixins.scss
│   │       │   ├── _page-header.scss
│   │       │   ├── _scaffolding.scss
│   │       │   ├── _sections.scss
│   │       │   ├── _table.scss
│   │       │   └── _tabset.scss
│   │       ├── components
│   │       │   ├── _auth.scss
│   │       │   ├── _footer.scss
│   │       │   ├── _header.scss
│   │       │   ├── _panels.scss
│   │       │   ├── _root.scss
│   │       │   ├── _sidebar.scss
│   │       │   └── _tablet.scss
│   │       ├── layout
│   │       │   ├── _loading.scss
│   │       │   └── _smb.scss
│   │       ├── style.scss
│   │       ├── utils
│   │       │   ├── _colors.scss
│   │       │   └── _typography.scss
│   │       └── vendors
│   │           ├── _bootstrap.scss
│   │           ├── _colorpicker.scss
│   │           ├── _fontawesome.scss
│   │           └── _rzslider.scss
│   └── templates.js
├── docker-compose.yml
└── express
├── Dockerfile
├── LICENSE
├── README.md
├── bin
│   └── index.js
├── npm-debug.log
├── npm-shrinkwrap.json
├── package.json
└── server
├── app.js
├── config
│   └── config.json
├── controllers
│   ├── accounts.js
│   ├── auth.js
│   ├── index.js
│   ├── todoitems.js
│   └── todos.js
├── migrations
│   ├── 20160717103305-create-todo.js
│   └── 20160717104733-create-todo-item.js
├── models
│   ├── index.js
│   ├── todo.js
│   └── todoitem.js
├── routes
│   └── index.js
└── services
├── account.js
├── cpe.js
├── device.js
└── index.js
59 directories, 166 files

后端

Dockerfile

# Create image based on the official Node 6 image from the dockerhub
FROM node:6
RUN useradd --user-group --create-home --shell /bin/false nodejs
# Create a directory where our app will be placed
RUN mkdir -p /usr/src/app
# Change directory so that our commands run inside this new directory
WORKDIR /usr/src/app
# Copy dependency definitions
COPY package.json /usr/src/app
# Install dependecies
RUN npm install
# Get all the code needed to run the app
COPY . /usr/src/app
# Expose the port the app runs in
EXPOSE 3000
# Serve the app
CMD ["node", "server/app.js"]

根据我的文件结构,我在上面的这个文件中有任何错误吗


前端

Dockerfile

FROM alpine:3.6
RUN apk add --update nginx && rm -rf /var/cache/apk/*
RUN mkdir -p /tmp/nginx/client-body
COPY files/nginx.conf /etc/nginx/nginx.conf
COPY files/default.conf /etc/nginx/conf.d/default.conf
COPY dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]

dockercompose.yml

version: '2.1'
# Define the services/containers to be run
services:
angular:
build: angular # specify the directory of the Dockerfile
network_mode: bridge
ports:
- 8080:80/tcp
volumes:
- /Users/bheng/Sites/BASE/angular/dist:/usr/share/nginx/html:rw

express: #name of the second service
build: express # specify the directory of the Dockerfile
ports:
- "3000:3000" #specify ports forewarding
mem_limit: 300m
memswap_limit: 1g
volumes:
- .:/home/nodejs/app
- /home/nodejs/app/node_modules

links:
- database

database: # name of the third service
image: postgres
environment:
POSTGRES_PASSWORD: ih4cku
ports:
- "5432:5432" # specify port forewarding

结果

我无法启动我的第三个实例。

我一直收到

docker-compose up
Starting base_angular_1 ... 
Starting base_database_1 ... 
Starting base_database_1
Starting base_database_1 ... done
Starting base_express_1 ... 
Starting base_express_1 ... done
Attaching to base_angular_1, base_database_1, base_express_1
database_1  | LOG:  database system was shut down at 2017-08-30 00:54:24 UTC
database_1  | LOG:  MultiXact member wraparound protections are now enabled
database_1  | LOG:  database system is ready to accept connections
database_1  | LOG:  autovacuum launcher started

base_express_1退出,代码为0

如何进一步进行调试?

好的,在你发布了你的app.js之后,我想我可以帮助你。

当您运行node app.js时,该app.js正在执行并成功退出,因为它只是一个模块,但没有服务器启动。

你需要一个这样的文件:

创建一个bin文件夹,并在其中创建一个文件,将该文件命名为www名字只是建议,你可以随便取什么名字。

#!/usr/bin/env node
/**
* Load any undefined ENV variables
*/
require('dotenv').config();
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('app:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}

然后确保安装以下软件包:

npm install debug --save
npm install dotenv --save

如果需要,可以从www文件中删除这些内容。我只是在这里包含了它们,这样我的共享www文件就可以运行了。

然后,在快递应用程序的Dockerfile中,使用:

node ./bin/www

此命令启动服务器,使进程保持活动状态,并为您的app.js express模块提供服务。确保www中需要app.js文件的位置与文件的位置匹配。我把../app放在需求中。

如何将其包含在DockerFile中?

我建议这样做:在package.json:中创建一个start条目

"start": "node ./bin/www"

在CCD_ 15部分中。

然后,更新您的Dockerfile:

CMD npm startCMD ["npm", "start"]

相关内容

最新更新