我正在尝试编写一个Dockerfile,作为一个标准化的开发环境。
Dockerfile:
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。
当然,我在容器中所做的更改是短暂的,因此我想在主机OS上挂载/home/project,然后转到主机上的空目录project并运行:
docker run -it -v ${pwd}:/home/project dev
但是我的项目文件夹会被覆盖,并且在容器中是空的。
如何挂载卷,使容器写入主机文件夹,而不是相反?
操作系统: Windows 10 Pro。
发布于 2018-02-02 19:48:55
挂载卷时,默认情况下read/write都是双向的。这意味着您在容器中写入的任何内容都将显示在主机目录中,反之亦然。
但在你的案子里发生了一些奇怪的事,对吧?
在构建过程中,您正在克隆一个git存储库。在构建过程中,卷不会被挂载。git数据驻留在您的码头映像中。
现在,当您运行码头容器时,您正在挂载卷。容器中的挂载路径将与源路径同步。这意味着容器目录将被宿主目录的内容覆盖。这就是为什么你的git数据丢失了。
可能的解决方案:
以CMD的形式运行脚本。该脚本可以克隆git等内容。
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/bashhttps://stackoverflow.com/questions/48589595
复制相似问题