【问题标题】:Docker create volume with file host to override container fileDocker 使用文件主机创建卷以覆盖容器文件
【发布时间】:2020-07-09 09:34:02
【问题描述】:

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

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

我有两个问题:

我需要什么命令才能在路径 /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 会被覆盖吗?

提前感谢您的帮助

【问题讨论】:

    标签: docker docker-compose dockerfile docker-volume


    【解决方案1】:

    您应该完全忽略 /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 目录替换为卷内容。

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多