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

Docker create volume with file host to override container file

我是 docker 的新手,正在从网上学习 resources.Basically 我有一个 angularjs 项目,它在文件夹 (src/assets/conf/appConfig.[=48) 中包含一个 conf 文件=]) 基本上我想要实现的是当我 运行 我的 docker (版本 - 19.03.8)命令 fileappConfig.json 应该从 /var/lib/docker/volumes/volumetest/_data/appConfig.json 复制到 src/assets/conf/appConfig.json.

我已经创建了一个卷(volumetest),如下所示:

我有两个问题:

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

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

创建以上内容后,我将在 angularjs 项目的 Dockerfile 中添加以下行:

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

当我执行 docker 运行 命令时,文件 src/assets/conf/appConfig.json 会被覆盖吗(docker 运行 -p 8000:8080 -d --name cm testApp:1.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 目录。