我试图编写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专业版。
答案 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