Docker 失败 - bcrypt_lib.node:Exec 格式错误

问题描述 投票:0回答:3

我尝试创建后端 API 的 docker 镜像。 但出现错误。我已经用谷歌搜索过它,每个有同样问题的人都必须在 .dockerignore 文件中添加node_module。

我已经这样做了,但是仍然有同样的错误。

我在这里添加我的文件信息。

Dockerfile

FROM node:alpine
WORKDIR /usr/src/app
COPY package*.json .
#COPY yarn.lock .
RUN apk add --no-cache yarn --repository="http://dl-cdn.alpinelinux.org/alpine/edge/community"
#RUN yarn install --frozen-lockfile
RUN yarn install
RUN yarn
COPY . .
CMD ["yarn", "dev"];

.dockerignore

/node_modules
.env
docker-compose.yml

docker-compose.yml

version: "3.9"

services:
  mongo_db:
    container_name: mongodb_container
    image: mongo:latest
    restart: always
    ports:
      - "27017:27017"
    volumes:
      - mongo_db:/data/db

  #EET service
  eetapi:
    container_name: eetapi_container
    build: .
    volumes:
      - .:/usr/src/app
    ports:
      - "3000:3000"
    environment:
      SITE_URL: http://localhost
      PORT: 3000
      MONGO_URL: mongodb://mongodb_container:27017/easyetapi
      JWT_SECRET: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      SENTRY_DSN: https://[email protected]/xxxxxxx
      MAILGUN_DOMAIN: mg.myeetdomain.tld
      MAILGUN_API_KEY: xxxxxxxxxxxxxxx-xxxxxxxxxxx-xxxxxxxx
      NODE_ENV: production
    depends_on:
      - mongo_db
volumes:
  mongo_db: {}

错误

Error Screenshot

请帮帮我。

谢谢你

docker docker-compose node-modules bcrypt
3个回答
7
投票

volumes:
块会使用主机上的当前目录覆盖映像中的所有内容。其中包括安装在 Dockerfile 中的
node_modules
树。如果您有 MacOS 或 Windows 主机,但有 Linux 容器,则替换
node_modules
树将导致出现错误。

您应该删除

volumes:
块,以便运行图像中内置的代码和库树。

由于绑定挂载实际上会覆盖 Dockerfile 所做的所有操作,因此它会抵消您从构建 Docker 映像中获得的任何好处。实际上,您只是运行一个未修改的

node
映像,其中包含绑定安装的主机内容,如果您在主机上建立 Node 而不涉及 Docker,那么您将通过更简单的设置获得相同的效果。 (您仍然可以从在容器中运行数据库中受益。)


0
投票

删除现有的node_modules并重建镜像。


0
投票

我解决了这个问题。只需在卷中的 docker-compose.yml 中添加类似“/app/node_modules”的代码即可。

© www.soinside.com 2019 - 2024. All rights reserved.