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 上构建提供足够的解决方法,但重要的是要注意这与官方支持的平台不同.
如有任何其他问题或疑虑,请随时跟进!
所以我们有一个使用 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 上构建提供足够的解决方法,但重要的是要注意这与官方支持的平台不同.
如有任何其他问题或疑虑,请随时跟进!