Docker节点Alpine 8分段故障(核心已转储) [英] Docker node alpine 8 Segmentation fault (core dumped)

查看:134
本文介绍了Docker节点Alpine 8分段故障(核心已转储)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于这一错误,我整天坚持不懈.当我尝试运行docker容器时,出现错误Segmentation fault (core dumped).

I'm stucked hard for a whole day with this error. When I've tried to run my docker container i've got an error Segmentation fault (core dumped).

为重现此错误,我将提供我的环境和代码.

So to reproduce this error I'll provide my env and code.

下面的第一个是Dockerfile,没什么特别的:

The first below is Dockerfile, nothing special:

FROM node:8.1.3-alpine

RUN apk add --no-cache --update krb5-dev alpine-sdk python

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app

EXPOSE 3000

CMD [ "npm", "start" ]

问题在于调用我的npm start脚本,它总是在具有此命令"test-prod": "mocha test/**/*",npm run test-prod处失败.如果我将其从npm中删除,则启动站点将正确部署.

The problem is with invoking my npm start script, it always fail at the npm run test-prod which has this command "test-prod": "mocha test/**/*",. If I remove this from npm start site is deployed without errors.

Test-prod从第一个测试开始,该测试使用supertest导入app.js:

Test-prod is starting from this first test, which importing app.js with supertest:

const { describe, it, before, after } = require('mocha');
const request = require('supertest');

const app = require('../../../app.js');
const User = require('../../../models/User');

const agent = request.agent(app);
//some tests

我想它可以与新的猫鼬版本4.11绑定,该版本要求auth并传入选项对象,但是当我通过它时,它警告我这是错误的:

I suppose that it can be bound with new mongoose version 4.11, which asks for auth and pass in option object but when i pass it, it warns me that it's mistake:

the options [user] is not supported
the options [pass] is not supported

最后是主要部分下面的app.js:

Finally the app.js below main part:

require('dotenv').config();

const express = require('express');
const path = require('path');
const favicon = require('serve-favicon');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const session = require('express-session');
const mongoose = require('mongoose');
const MongoStore = require('connect-mongo')(session);

const routes = require('./routes');

const app = express();

const URI = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test' ? 'mongodb://localhost/mulibwanji' : process.env.MONGODB_URI;

mongoose.connect(URI, { // In URI also I have user and pass as expected
  useMongoClient: true,
  user: 'login',
  pass: 'pass',
});

Docker日志中的错误:

And error from Docker logs:

2017-07-10T18:53:49.796105113Z
2017-07-10T18:53:49.802949762Z
2017-07-10T18:53:49.814928711Z   Local strategy authentication
2017-07-10T18:53:49.826690115Z     Login
2017-07-10T18:53:51.226982330Z Segmentation fault (core dumped)
2017-07-10T18:53:51.258175441Z npm info lifecycle mulibwanji@0.0.0~test-prod: Failed to exec test-prod script
2017-07-10T18:53:51.258270885Z npm ERR! code ELIFECYCLE
2017-07-10T18:53:51.258406077Z npm ERR! errno 139
2017-07-10T18:53:51.258445569Z npm ERR! mulibwanji@0.0.0 test-prod: `mocha test/**/*`
2017-07-10T18:53:51.258519335Z npm ERR! Exit status 139
2017-07-10T18:53:51.258539503Z npm ERR!
2017-07-10T18:53:51.258579954Z npm ERR! Failed at the mulibwanji@0.0.0 test-prod script.
2017-07-10T18:53:51.258617042Z npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

这里是堆栈跟踪:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'start' ]
2 info using npm@5.0.3
3 info using node@v8.1.3
4 verbose run-script [ 'prestart', 'start', 'poststart' ]
5 info lifecycle mulibwanji@0.0.0~prestart: mulibwanji@0.0.0
6 silly lifecycle mulibwanji@0.0.0~prestart: no script for prestart, continuing
7 info lifecycle mulibwanji@0.0.0~start: mulibwanji@0.0.0
8 verbose lifecycle mulibwanji@0.0.0~start: unsafe-perm in lifecycle true
9 verbose lifecycle mulibwanji@0.0.0~start: PATH: /usr/local/lib/node_modules/npm/bin/node-gyp-bin:/usr/src/app/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
10 verbose lifecycle mulibwanji@0.0.0~start: CWD: /usr/src/app
11 silly lifecycle mulibwanji@0.0.0~start: Args: [ '-c',
11 silly lifecycle   'npm run build && npm run test-prod && npm run lint && npm run update-schema && node ./bin/www' ]
12 silly lifecycle mulibwanji@0.0.0~start: Returned: code: 139  signal: null
13 info lifecycle mulibwanji@0.0.0~start: Failed to exec start script
14 verbose stack Error: mulibwanji@0.0.0 start: `npm run build && npm run test-prod && npm run lint && npm run update-schema && node ./bin/www`
14 verbose stack Exit status 139
14 verbose stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:283:16)
14 verbose stack     at emitTwo (events.js:125:13)
14 verbose stack     at EventEmitter.emit (events.js:213:7)
14 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:40:14)
14 verbose stack     at emitTwo (events.js:125:13)
14 verbose stack     at ChildProcess.emit (events.js:213:7)
14 verbose stack     at maybeClose (internal/child_process.js:897:16)
14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:208:5)
15 verbose pkgid mulibwanji@0.0.0
16 verbose cwd /usr/src/app
17 verbose Linux 4.11.9-coreos
18 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "start"
19 verbose node v8.1.3
20 verbose npm  v5.0.3
21 error code ELIFECYCLE
22 error errno 139
23 error mulibwanji@0.0.0 start: `npm run build && npm run test-prod && npm run lint && npm run update-schema && node ./bin/www`
23 error Exit status 139
24 error Failed at the mulibwanji@0.0.0 start script.
24 error This is probably not a problem with npm. There is likely additional logging output above.
25 verbose exit [ 139, true ]

非常感谢您的任何建议.

I will appreciate so much any suggestions, thanks.

推荐答案

似乎bcrypt上载了与musl alpine libc不兼容的bcrypt预编译版本.我在Dockerfile中添加了以下内容:

Seems like bcrypt has uploaded pre-compiled versions of bcrypt that is incompatible with the musl alpine libc. I added the following to my Dockerfile:

RUN npm rebuild bcrypt --build-from-source

它自动开始工作.我也无法恢复到7,因为这样我就遇到了二进制不兼容的其他问题.

And it automagically started working. I couldn't revert to 7 either, because then I got some other issue with the binary not being compatible.

在您的情况下,bcrypt可能是次要依赖关系,这说明了您的行为.

bcrypt could be a secondary dependency in your case, explaining your behavior.

对我来说,它在7月7日停止工作.尽管bcrypt的最新版本已于2月发布,但我仍然认为可以更新"一个版本,也许他们在那时添加了预编译的版本,我不知道.

For me it stopped working on the 7th of July. Although the latest release of bcrypt was published in february, I still think it's possible to "update" a release and maybe they added the pre compiled versions at that date, I dunno.

这篇关于Docker节点Alpine 8分段故障(核心已转储)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆