使Dockerfile VOLUME表现得像docker-compose卷

use*_*780 4 javascript node.js docker dockerfile docker-compose

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

这是我的Dockerfile:

FROM node:onbuild
EXPOSE 3000
RUN mkdir /app
VOLUME ./:/app/
WORKDIR /app/
RUN npm install -g nodemon
CMD nodemon server.js
Run Code Online (Sandbox Code Playgroud)

这是一个工作的docker-compose.yml:

test:
  build: ./
  volumes:
    - ./:/app/
  working_dir: /app/
  command: npm start 
  ports:
    - "3000:3000"
Run Code Online (Sandbox Code Playgroud)

jaz*_*got 5

VOLUMEDockerfile中的命令的含义略有不同:

  1. 不能在Dockerfile中定义安装的卷
  2. 它仅用于指定容器间的体积

因此,在您的Dockerfile中,VOLUME ./:/app/必须将其更改为VOLUME /app/。您的docker-compose定义将告诉docker将本地目录挂载./app容器中。


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