首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker:安装卷覆盖容器

Docker:安装卷覆盖容器
EN

Stack Overflow用户
提问于 2018-02-02 19:26:36
回答 1查看 1.5K关注 0票数 1

我正在尝试编写一个Dockerfile,作为一个标准化的开发环境。

Dockerfile:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2018-02-02 19:48:55

挂载卷时,默认情况下read/write都是双向的。这意味着您在容器中写入的任何内容都将显示在主机目录中,反之亦然。

但在你的案子里发生了一些奇怪的事,对吧?

在构建过程中,您正在克隆一个git存储库。在构建过程中,卷不会被挂载。git数据驻留在您的码头映像中。

现在,当您运行码头容器时,您正在挂载卷。容器中的挂载路径将与源路径同步。这意味着容器目录将被宿主目录的内容覆盖。这就是为什么你的git数据丢失了。

可能的解决方案:

以CMD的形式运行脚本。该脚本可以克隆git等内容。

run.sh

代码语言:javascript
复制
#!/bin/bash

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

Dockerfile

代码语言:javascript
复制
RUN ADD run.sh /bin

# run run.sh, install them and fire up a shell.
CMD run.sh && npm install && /bin/bash
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48589595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档