如何在Dockerfile中复制package.json?

yftpprvb  于 2023-06-29  发布在  Docker
关注(0)|答案(1)|浏览(206)

我在将我的package.json复制到Dockerfile上下文时遇到问题,下面是我的文件树:

  1. src
  2. - apps
  3. -- api
  4. --- Dockerfile
  5. - docker
  6. -- tcp
  7. --- docker-compose.yml
  8. - package.json

下面是我的Dockerfile:

  1. FROM node:14.8.0-alpine as develop
  2. WORKDIR /usr/src/app
  3. COPY ../package.json .
  4. COPY ../yarn.lock .
  5. RUN yarn install
  6. CMD npm run build api&& node dist/apps/api/main

和docker-compose.yml

  1. version: '3'
  2. services:
  3. api:
  4. container_name: api-gateway
  5. build:
  6. context: ../../apps/api
  7. dockerfile: ../../apps/api/Dockerfile
  8. restart: always
  9. hostname: api
  10. env_file:
  11. - ../../.env
  12. ports:
  13. - "3000:3000"
  14. networks:
  15. - backend

有人能告诉我如何正确复制package.json文件来解决下面的错误吗?

  1. => ERROR [3/5] COPY ../package.json . 0.0s
  2. => ERROR [4/5] COPY ../yarn.lock . 0.0s
  3. ------
  4. > [3/5] COPY ../package.json .:
  5. ------
  6. ------
  7. > [4/5] COPY ../yarn.lock .:
  8. ------
  9. failed to compute cache key: "/yarn.lock" not found: not found

感谢任何帮助!

zyfwsgd6

zyfwsgd61#

将docker-compose.yml移到项目的根目录下
删除上下文,因为它默认为当前文件夹,并更改Dockerfile路径(或者也移动Dockerfile,因为它不是应用源代码的一部分)

  1. build:
  2. dockerfile: src/apps/api/Dockerfile

也更新env文件
然后从直接上下文复制。容器应该对自己的yarn锁文件IMO负责,所以不需要复制它。(我遇到过这样的问题,在修改包json之后,我忘记更新主机上的锁文件,所以当包含锁文件时,构建失败,版本冲突)

  1. COPY package.json .

您还应该考虑为至少node_modules添加.dockerignore

相关问题