Docker合成无法在“/app”中找到package.json文件

neskvpey  于 2022-11-22  发布在  Docker
关注(0)|答案(3)|浏览(251)

这是我的项目结构

.
├── README.md
├── docker-compose.yml
└── frontend
    ├── Dockerfile
    ├── README.md
    ├── build
    ├── package.json
    ├── yarn.lock
    └── ...

Docker-compose.yml

version: '3.7'

services:
  frontend:
    build:
      context: frontend
      dockerfile: Dockerfile
    volumes:
      - '.:/app'
      - '/app/node_modules'
    ports:
      - 3000:3000

停靠文件

FROM node:14-alpine

WORKDIR /app

COPY ./package.json /app/package.json
RUN yarn install --no-lockfile

COPY . .

CMD ["yarn", "start"]

如果我使用docker构建容器,它可以正常工作。
但是docker-compose up --build总是返回

Attaching to book-marketplace_frontend_1
frontend_1  | yarn run v1.22.15
frontend_1  | error Couldn't find a package.json file in "/app"
frontend_1  | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
book-marketplace_frontend_1 exited with code 1

奇怪的是,docker-compose仍然可以运行yarn install(需要package.json),但是以后却找不到它。希望有人能帮助我

f0brbegy

f0brbegy1#

因为 您 已经 在 workdir app 中 , 正如 您 先前 定义 为 WORKDIR 一样 。 所以 将 该行 更改 为 :
COPY ./package.json /package.json

flvlnr44

flvlnr442#

您的volumes:块将容器中的/app目录替换为完全不同的内容。(您使用frontend子目录作为构建上下文,但随后在/app上绑定挂载.;如果您使用docker-compose run frontend ls,您将看到一个frontend子目录,而不是您应用程序。)
您可以通过删除volumes:块来解决这个问题。您的容器将运行内置到映像中的代码,而不是其他代码。

version: '3.8'
services:
  frontend:
    build: frontend
    ports:
      - '3000:3000'
js5cn81o

js5cn81o3#

或者你可以改变docker-compose.yml中的行,对我来说很有用

volumes:
  - ./:/app

volumes:
  - ./app:/app

相关问题