Docker Nodejs 和 Couchbase SDK 的图像

Docker image for Nodejs and Couchbase SDK

所以我们有一个使用 NodeJS Couchbase 的 nodejs 微服务 SDK 3.2 我们正在尝试使用 Alpine 基础镜像为我们的应用程序构建一个最小的 docker 镜像,但似乎 sdk 需要的不仅仅是我们添加到基础镜像中的内容。

这是我们的docker文件

FROM node:12-alpine3.13

RUN apk add --no-cache --virtual .gyp python3 make g++

WORKDIR /app

COPY package*.json ./

COPY .npmrc ./

RUN npm cache clean --force
RUN rm -rf node_modules
RUN npm install --only=production

RUN rm -rf .gyp

COPY . .

CMD [ “npm”, “start”]

我们运行进入如下错误,

Error: Error loading shared library libresolv.so.2: No such file or directory (needed by /app/node_modules/couchbase/build/Release/couchbase_impl.node)
at Object.Module._extensions…node (internal/modules/cjs/loader.js:1187:18)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at Object.bindings [as default] (/app/node_modules/bindings/bindings.js:112:48)
at Object. (/app/node_modules/couchbase/dist/binding.js:70:35)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions…js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)

我们需要添加任何额外的 alpine 库吗?

编辑:这个问题似乎比我想象的要深。 参考这个线程:Use shared library that uses glibc on AlpineLinux

所以它说 Alpine 使用 musl 作为 c 库,显然 couchbase 需要 glibc?

编辑 2:现在可以使用了。

FROM node:12-alpine3.13
RUN apk add --no-cache --virtual .gyp python3 make g++
WORKDIR /app
COPY package*.json ./
COPY .npmrc ./
RUN npm cache clean --force
RUN rm -rf node_modules
RUN npm install
RUN npm install -g node-gyp
RUN npm install couchbase
RUN rm -rf .gyp
COPY . .
CMD [ “npm”, “start”]

在 Couchbase 论坛上回答:https://forums.couchbase.com/t/help-docker-image-for-nodejs-app-using-couchbase-sdk-3-2/33267

简而言之,官方不支持Alpine。您可以在 platform compatibility in the documentation 上阅读更多信息。您可以在那里找到适合您需求的受支持发行版。

正如在论坛上分享的那样,选项 --build-with-source 将避免使用预构建,这可能会为在 Alpine 上构建提供足够的解决方法,但重要的是要注意这与官方支持的平台不同.

如有任何其他问题或疑虑,请随时跟进!