使Dockerfile VOLUME的行为类似于docker-compose卷

时间:2016-05-05 05:33:18

标签: javascript node.js docker docker-compose dockerfile

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

这是我的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"

1 个答案:

答案 0 :(得分:4)

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

  1. 无法在Dockerfile中定义已装入的卷
  2. 它仅用于指定容器间容量
  3. 因此,在您的Dockerfile中,VOLUME ./:/app/必须更改为VOLUME /app/。您的docker-compose定义会告诉docker将容器中的本地目录.挂载到/app

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