【发布时间】:2022-01-25 23:44:18
【问题描述】:
在 Docker 中运行 node.js 时,使用 sharp.js lib 我收到“无效指令”错误,并以代码 1 退出。
这可能与sharp.js使用的“libvips”有关, 这需要C编译器。 我尝试使用各种基本 Docker 映像,但到目前为止都得到相同的错误。任何建议都会有所帮助。
这是最小可重现集:
当
const sharp = require("sharp");
被注释掉时,它会起作用。
当它被包含时,得到这个错误
Illegal instruction
Dockerfile
FROM node
RUN mkdir /app
WORKDIR /app
COPY . ./
RUN npm install
EXPOSE 4004
CMD ["node", "test.js"]
test.js
const app = require("express")();
const sharp = require("sharp");
app.get("/", (req, res) => {
res.send(`time: ${new Date()}`);
});
app.listen(4004, () => console.log(`listening on port 4004`));
package.json
{
"dependencies": {
"axios": "^0.24.0",
"express": "^4.17.1",
"fast-csv": "^4.1.1",
"pdfkit": "^0.13.0",
"sharp": "^0.29.3"
},
"devDependencies": {
"nodemon": "^2.0.15"
}
}
构建容器镜像:
docker build -t test .
开始交互式测试:
docker run -d --name test test tail -f /dev/null
docker exec -it test sh
然后
node test.js
当需要“sharp.js”时,得到错误
Illegal instruction
,否则不会。
cmets 建议在使用“alpine”基础映像时可能会发生这种情况,但在这种情况下,其他 node.js Docker 映像也会发生这种情况。
希望这能让它更清楚一点。
相同的清晰库和代码没有容器之外没有问题。
-
首先,提取 minimal reproducible example 。如果你只是在运行一些软件,那也不会使它成为一个编程问题,但更适合一个错误报告。