Docker节点Alpine 8分段故障(核心已转储) [英] Docker node alpine 8 Segmentation fault (core dumped)
问题描述
由于这一错误,我整天坚持不懈.当我尝试运行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屋!