【问题标题】:How to deal with Exec format error in docker-compose如何处理 docker-compose 中的 Exec 格式错误
【发布时间】:2021-01-05 21:52:47
【问题描述】:

我尝试通过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

这是我的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

设置服务器后,我尝试访问。但出现以下错误

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

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

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

谢谢

【问题讨论】:

  • 删除docker-compose.yml 文件中的volumes: 有帮助吗?或者等效地,docker-compose down -v?
  • 这似乎是因为为您的机器(mac os?)构建的 bcrypt 无法在 docker 映像(linux)stackoverflow.com/a/20590261/2422826 上工作,我尝试了几种方法来尝试获取 docker编译它自己的 bcrypt,包括richardkotze.com/top-tips/…;但是,即使确保我有一个 .dockerignore 文件并确保所有内容都已删除,它也不起作用...我确实通过将 bcrypt 替换为 bcryptjs 包然后运行 ​​npm rebuild 来使其工作。我希望看到解决此问题的更好步骤。
  • 我和 auerbachb 在同一条船上,我已经尝试了一切,但无法让它工作
  • bcrypt 替换为bcryptjs。它适用于 Mac M1

标签: javascript node.js docker docker-compose


【解决方案1】:

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

.dockerignore
node_modules

我的 Dockerfile 看起来像这样:

FROM node:14-alpine as development
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

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

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 2022-11-03
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2022-07-25
    相关资源
    最近更新 更多