【问题标题】:Make Dockerfile VOLUME behave like docker-compose volumes使 Dockerfile VOLUME 的行为类似于 docker-compose 卷
【发布时间】:2016-05-05 05:33:18
【问题描述】:

我正在尝试设置 Dockerfile 以将我的主机目录挂载到我指定的 docker 容器目录(因此代码更改将立即反映)。当我运行docker run -p 3000: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"

【问题讨论】:

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


    【解决方案1】:

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

    1. 不能在 Dockerfile 中定义挂载的卷
    2. 仅用于指定容器间卷

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 2019-08-17
      • 2019-02-10
      • 1970-01-01
      • 2017-02-06
      相关资源
      最近更新 更多