Javascript 使Dockerfile卷的行为类似于docker compose卷

Javascript 使Dockerfile卷的行为类似于docker compose卷,javascript,node.js,docker,docker-compose,dockerfile,Javascript,Node.js,Docker,Docker Compose,Dockerfile,我正在尝试设置一个Dockerfile以将我的主机目录装载到指定的docker容器目录(因此代码更改将立即反映出来)。当我运行docker run-p3000:3000-d-v~/Projects/test:/app test时,文件被挂载,一切正常。但是,一旦关闭容器,文件更改就不会像从docker compose文件运行volumes时所做的更改一样留在容器中 这是我的Dockerfile: FROM node:onbuild EXPOSE 3000 RUN mkdir /app VOLUM

我正在尝试设置一个
Dockerfile
以将我的主机目录装载到指定的docker容器目录(因此代码更改将立即反映出来)。当我运行
docker run-p3000:3000-d-v~/Projects/test:/app test
时,文件被挂载,一切正常。但是,一旦关闭容器,文件更改就不会像从
docker compose
文件运行
volumes
时所做的更改一样留在容器中

这是我的Dockerfile:

FROM node:onbuild
EXPOSE 3000
RUN mkdir /app
VOLUME ./:/app/
WORKDIR /app/
RUN npm install -g nodemon
CMD nodemon server.js
这是一个正在工作的docker-compose.yml:

test:
  build: ./
  volumes:
    - ./:/app/
  working_dir: /app/
  command: npm start 
  ports:
    - "3000:3000"

Dockerfile中的
VOLUME
命令的含义稍有不同:

  • 不能在Dockerfile中定义装入的卷
  • 它仅用于指定容器间卷
  • 因此,在Dockerfile中,
    VOLUME./:/app/
    必须更改为
    VOLUME/app/
    。您的
    docker compose
    定义将告诉docker将本地目录
    装载到容器中的
    /app


    -v
    选项和
    docker compose
    中的
    volumes
    标记的工作方式相同。主机目录已装入容器目录。容器目录中映像中存在的任何文件都将替换为主机目录中的文件