如何处理docker-compose中的Exec格式错误

Hei*_*erg 3 javascript node.js docker docker-compose

我尝试通过构建服务器和数据库docker

这是我的docker-compose.yml

version: '3'

services:
  api-server:
    build: ./api
    links:
      - 'db'
    ports:
      - '3000:3000'
    volumes:
      - ./api:/src
      - ./src/node_modules
    tty: true
    container_name: api-server

  db:
    build:
      context: .
      dockerfile: ./db/Dockerfile
    restart: always
    hostname: db
    environment:
      MYSQL_ROOT_PASSWORD: test
      MYSQL_USER: root
      MYSQL_PASSWORD: test
      MYSQL_DATABASE: db
    volumes:
      - './db:/config'
    ports:
      - 3306:3306
    container_name: db

Run Code Online (Sandbox Code Playgroud)

这是我的Dockerfile

FROM node:alpine

WORKDIR /src
COPY . .

RUN rm -rf /src/node_modules
RUN rm -rf /src/package-lock.json

RUN yarn install

CMD yarn start:dev
Run Code Online (Sandbox Code Playgroud)

设置好服务器后,我尝试访问。但发生了以下错误

Error: Error loading shared library /src/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node: Exec format error

我想知道问题出在哪里。以及如何解决它。

如果有人有意见,请告诉我。

谢谢

小智 5

对于像我这样寻找解决方案的每个人来说,我的解决方案是添加一个.dockerignore包含以下内容的文件:

.dockerignore
node_modules
Run Code Online (Sandbox Code Playgroud)

我的 Dockerfile 如下所示:

FROM node:14-alpine as development
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
Run Code Online (Sandbox Code Playgroud)

添加.dockerignore-file 可防止COPY . .-command 复制node_modules-fold 并修复 bcrypt 未加载的问题。