Docker使用文件主机创建卷以覆盖容器文件

时间:2020-07-09 09:34:02

标签: docker docker-compose dockerfile docker-volume

我是docker的新手,可以从在线资源中学习。基本上我有一个angularjs项目,该项目在文件夹(src / assets / conf / appConfig.json)中包含一个conf文件,基本上我想要实现的是当我运行我的docker(version-19.03.8)命令 fileappConfig.json应该从/var/lib/docker/volumes/volumetest/_data/appConfig.json复制到 src/assets/conf/appConfig.json

我创建了一个音量(volumetest),如下所示:

enter image description here

我有两个问题:

我需要什么命令才能在/ var / lib / docker / volumes / volumetest / _data路径中创建文件appConfig.json并在文件中添加以下行:

{ baseUrl:http:// localhost:8080 / }

一旦创建了上面的代码,我将在我的Dockerfile中为angularjs项目添加以下行:

COPY src/assets/conf/appConfig.json /var/lib/docker/volumes/volumetest/_data

当我执行docker run命令(docker run -p 8000:8080 -d --name cm testApp:1.0)时,是否会覆盖文件src / assets / conf / appConfig.json?

在此先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您应该完全忽略/var/lib/docker树。相反,您可以在启动时使用Docker bind mount替换文件。在主机上创建文件;假设您在当前目录中创建了备用appConfig.json。运行容器时,将该文件安装在以下位置:

docker run \
  -v $PWD/appConfig.json:/app/src/assets/conf/appConfig.json \
  ... \
  testApp:1.0

/var/lib/docker的内容是特定于安装的,不能直接进行编辑。另外,由于容器和图像具有隔离的文件系统空间,因此无法直接写入Dockerfile中的主机目录。如果您使用命名卷,则只能在容器内部编辑文件,并且必须用卷内容替换整个conf目录。