2

I have a container running an API that works great. A few days ago I had some problems with my application so I decided to go back and rebuild my Docker container. But everything didn't go as planned... When I restarted with a new rebuilt version I got a sqlite3 error:

api_1  | > node src/index.js
api_1  | 
api_1  | internal/modules/cjs/loader.js:1131
api_1  |   return process.dlopen(module, path.toNamespacedPath(filename));
api_1  |                  ^
api_1  | 
api_1  | Error: Error relocating /usr/src/api/node_modules/sqlite3/lib/binding/napi-v6-linux-x64/node_sqlite3.node: fcntl64: symbol not found
api_1  |     at Object.Module._extensions..node (internal/modules/cjs/loader.js:1131:18)
api_1  |     at Module.load (internal/modules/cjs/loader.js:937:32)
api_1  |     at Function.Module._load (internal/modules/cjs/loader.js:778:12)
api_1  |     at Module.require (internal/modules/cjs/loader.js:961:19)
api_1  |     at require (internal/modules/cjs/helpers.js:92:18)
api_1  |     at Object.<anonymous> (/usr/src/api/node_modules/sqlite3/lib/sqlite3-binding.js:4:15)
api_1  |     at Module._compile (internal/modules/cjs/loader.js:1072:14)
api_1  |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
api_1  |     at Module.load (internal/modules/cjs/loader.js:937:32)
api_1  |     at Function.Module._load (internal/modules/cjs/loader.js:778:12)
FROM node:14.17.6-alpine

# Create the directory!
RUN mkdir -p /usr/src/api
WORKDIR /usr/src/api

# Copy and Install our api
COPY package.json /usr/src/api
RUN npm install

# Our precious api
COPY . /usr/src/api
RUN ln -snf /usr/share/zoneinfo/Europe/Paris /etc/localtime && echo Europe/Paris > /etc/timezone

# Start me!
CMD ["npm", "start"]

I managed to find the version that has the same source code but it works fine. So I try to solve the problem for my next build: Here are the execution traces of the two versions with the same source code.

The execution traces of the build that works:

$ docker build -t $CONTAINER_IMAGE:$CI_COMMIT_SHA ./$PATH_DOCKERFILE
Step 1/8 : FROM node:14.17.6-alpine
14.17.6-alpine: Pulling from library/node
6a428f9f83b0: Pulling fs layer
630852b09df4: Pulling fs layer
f13ad23a48a4: Pulling fs layer
43df7c393f3d: Pulling fs layer
43df7c393f3d: Waiting
6a428f9f83b0: Verifying Checksum
6a428f9f83b0: Download complete
f13ad23a48a4: Verifying Checksum
f13ad23a48a4: Download complete
43df7c393f3d: Verifying Checksum
43df7c393f3d: Download complete
6a428f9f83b0: Pull complete
630852b09df4: Verifying Checksum
630852b09df4: Download complete
630852b09df4: Pull complete
f13ad23a48a4: Pull complete
43df7c393f3d: Pull complete
Digest: sha256:8c94a0291133e16b92be5c667e0bc35930940dfa7be544fb142e25f8e4510a45
Status: Downloaded newer image for node:14.17.6-alpine
 ---> 1d909dafa77f
Step 2/8 : RUN mkdir -p /usr/src/api
 ---> Running in d1dc77ffefaf
Removing intermediate container d1dc77ffefaf
 ---> d00d0ca95030
Step 3/8 : WORKDIR /usr/src/api
 ---> Running in 01661be5464e
Removing intermediate container 01661be5464e
 ---> 977f95e8b0fe
Step 4/8 : COPY package.json /usr/src/api
 ---> 61734ae0ce22
Step 5/8 : RUN npm install
 ---> Running in 268fb41d9940
npm WARN deprecated node-pre-gyp@0.11.0: Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated tar@2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
> sqlite3@5.0.2 install /usr/src/api/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build
node-pre-gyp WARN Using request for node-pre-gyp https download 
[sqlite3] Success: "/usr/src/api/node_modules/sqlite3/lib/binding/napi-v3-linux-x64/node_sqlite3.node" is installed via remote
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN pokemon@1.0.0 No description
added 169 packages from 202 contributors and audited 169 packages in 18.574s
4 packages are looking for funding
  run `npm fund` for details
found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details
Removing intermediate container 268fb41d9940
 ---> 9a56f37f5ea0
Step 6/8 : COPY . /usr/src/api
 ---> e87d419c4d57
Step 7/8 : RUN ln -snf /usr/share/zoneinfo/Europe/Paris /etc/localtime && echo Europe/Paris > /etc/timezone
 ---> Running in 003be13bd790
Removing intermediate container 003be13bd790
 ---> 2735e5435222
Step 8/8 : CMD ["npm", "start"]
 ---> Running in 7315e9692e2e
Removing intermediate container 7315e9692e2e
 ---> bb1800cf2b98
Successfully built bb1800cf2b98

The traces of execution of the build that does not work:

$ docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME .
Step 1/8 : FROM node:14.17.6-alpine
14.17.6-alpine: Pulling from library/node
6a428f9f83b0: Pulling fs layer
630852b09df4: Pulling fs layer
f13ad23a48a4: Pulling fs layer
43df7c393f3d: Pulling fs layer
43df7c393f3d: Waiting
6a428f9f83b0: Verifying Checksum
6a428f9f83b0: Download complete
f13ad23a48a4: Verifying Checksum
f13ad23a48a4: Download complete
43df7c393f3d: Verifying Checksum
43df7c393f3d: Download complete
6a428f9f83b0: Pull complete
630852b09df4: Download complete
630852b09df4: Pull complete
f13ad23a48a4: Pull complete
43df7c393f3d: Pull complete
Digest: sha256:8c94a0291133e16b92be5c667e0bc35930940dfa7be544fb142e25f8e4510a45
Status: Downloaded newer image for node:14.17.6-alpine
 ---> 1d909dafa77f
Step 2/8 : RUN mkdir -p /usr/src/api
 ---> Running in c9a3c82cf360
Removing intermediate container c9a3c82cf360
 ---> 3f3b5ec7912b
Step 3/8 : WORKDIR /usr/src/api
 ---> Running in 56b15384366c
Removing intermediate container 56b15384366c
 ---> 221dcba87eb5
Step 4/8 : COPY package.json /usr/src/api
 ---> 0f369984e965
Step 5/8 : RUN npm install
 ---> Running in c77ef8c0f496
> sqlite3@5.0.3 install /usr/src/api/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build
[sqlite3] Success: "/usr/src/api/node_modules/sqlite3/lib/binding/napi-v6-linux-x64/node_sqlite3.node" is installed via remote
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN pokemon@1.0.0 No description
added 159 packages from 175 contributors and audited 159 packages in 17.298s
6 packages are looking for funding
  run `npm fund` for details
found 0 vulnerabilities
Removing intermediate container c77ef8c0f496
 ---> ccb19de751c9
Step 6/8 : COPY . /usr/src/api
 ---> d43249d2c30a
Step 7/8 : RUN ln -snf /usr/share/zoneinfo/Europe/Paris /etc/localtime && echo Europe/Paris > /etc/timezone
 ---> Running in b0991e5edfd6
Removing intermediate container b0991e5edfd6
 ---> 352c6a3611fd
Step 8/8 : CMD ["npm", "start"]
 ---> Running in 9d878994fc42
Removing intermediate container 9d878994fc42
 ---> 0adaf22448f1
Successfully built 0adaf22448f1
James Z
  • 12,209
  • 10
  • 24
  • 44
Saibe
  • 21
  • 2
  • 1
    I have this problem when running on my Raspberry Pi. I've built the image using the Pi itself but still have the issue. No problems running an amd64 image on macOS or Fedora. Frustrating since I want to run this on the Pi. My error contains napi-v3-linux-arm instead of napi-v6-linux-x64 so it appears to be trying to load the correct architecture. – Evan Shortiss Apr 19 '22 at 02:29
  • FYI - Just found this issue on GitHub.: https://github.com/TryGhost/node-sqlite3/issues/1581 Seems to be related to using Alpine images. – Evan Shortiss Apr 19 '22 at 02:39

0 Answers0