为什么在docker compose中模块不能只通过绑定卷安装



当我尝试docker-compose builddocker-compose up -d

我的api-server容器没有启动。

我试过

docker logs api-server

yarn run v1.22.5
$ nest start --watch
/bin/sh: nest: not found
error Command failed with exit code 127.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

似乎没有安装nest软件包。因为CCD_ 6未从主机复制到容器。

但在我看来,由volume绑定到docker-compose.yml,因此命令yarn install应该引用- ./api:/src

为什么我们需要COPY文件到容器?

为什么只有volume绑定不能正常工作?

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

感谢

以下是dockerfile

FROM node:alpine
WORKDIR /src
RUN rm -rf /src/node_modules
RUN rm -rf /src/package-lock.json
RUN apk --no-cache add curl

RUN yarn install
CMD yarn start:dev

以下是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

卷在运行时安装,而不是在构建时安装,因此在您的情况下,您应该在安装依赖项并运行任何需要这些依赖项的命令之前复制package.json

一些参考文献:

  • Docker在构建时使用卷进行构建
  • 您可以在构建Docker映像以缓存依赖关系的同时装载卷吗

最新更新