Docker:安装卷会覆盖容器

时间:2018-02-02 19:26:37

标签: windows docker containers dockerfile

我试图编写Dockerfile用作标准化开发环境。

Dokerfile:

FROM node:9.5.0

WORKDIR /home/project

# install some stuff...

# clone the repo
RUN git clone https://github.com/... . 

# expose 
VOLUME /home/project

# fetch latest changes from git, install them and fire up a shell.
CMD git pull && npm install && /bin/bash

构建图像后(例如标记为dev), 运行docker run -it dev为我提供了一个安装了项目并且最新的shell。

当然,我在容器中所做的更改是短暂的,所以我想在主机操作系统上挂载/home/project,然后转到主机上的目录project,跑:

docker run -it -v ${pwd}:/home/project dev

但是我的项目文件夹被覆盖并且在容器内是空的。

如何安装卷以使容器写入主机文件夹而不是相反?

操作系统:Windows 10专业版。

1 个答案:

答案 0 :(得分:0)

装载卷时,默认情况下read/write都是双向的。

这意味着,您在容器中编写的任何内容都将显示在主机目录中,反之亦然。

但是在你的情况下发生了一些有线的事情,对吗?

我会试着告诉你这里发生了什么。

在构建过程中,您正在克隆git存储库。在构建过程中,卷不会安装。直接将Git数据附加到您的泊坞窗中。

现在,当您运行docker容器时,您正在安装卷。容器中的装载路径将与源路径同步。这意味着容器目录将覆盖主机目录。

这就是你的git数据丢失的原因。

可能的解决方案:

以CMD身份运行脚本。该脚本将克隆git repo并将执行其他操作。

文件run.sh

#!/bin/bash

# clone the repo
RUN git clone https://github.com/... . 

在Dockerfile中

RUN ADD run.sh /bin

# run run.sh, install them and fire up a shell.
CMD run.sh && npm install && /bin/bash