【问题标题】:Is there a way to override the host's folder with the container's folder using volumes in Docker?有没有办法使用 Docker 中的卷用容器的文件夹覆盖主机的文件夹?
【发布时间】:2021-07-14 06:09:55
【问题描述】:

我对使用 Docker 和 Docker Compose(使用 Docker Compose 解决这个特定问题)相当陌生。到目前为止,我对所面临的问题的了解如下:当在主机文件夹和容器文件夹中有可用内容时使用卷时,容器文件夹内的文件被隐藏,然后主机文件可供使用容器。

我想反过来使用它。我想将容器的文件(复制到 Dockerfile 中的映像中)提供给主机文件夹。

有没有办法做到这一点?

这里有一堆我的 Dockerfile 和 Docker Compose 的屏幕截图来展示我的设置。

Dockerfile Screenshot

DockerCompose Screenshot

提前致谢! :)

【问题讨论】:

    标签: docker docker-compose docker-volume


    【解决方案1】:

    我多次遇到同样的事情,我的处理方式如下。

    由于主机卷始终优先于容器文件系统,因此您必须先将文件从容器中复制到主机,然后再将它们卷安装回来 - 这样您就可以得到原来的文件,以及可能出现的文件未来的变化(通过容器)。

    以下都是伪代码,但希望能模拟这个概念:

    首先运行主容器:

    docker run --rm -d --name my-container registry/image-name

    然后将你想要的文件从它复制到本地文件系统

    docker cp my-container:/files/i/want ./files

    然后停止原来的容器

    docker stop my-container

    然后在下次运行时将它们挂载到容器中

    docker run --rm -d --name my-container -v ./files:/files/i/want registry/image-name


    显然您在那里也提到了 compose,因此只需将卷映射反映到 compose 格式中 - 复制内容需要通过标准 docker 完成,但符合上述规定。

    注意:我是盲目地编写了上述命令,但会在午餐时检查它们并纠正任何错误输入 - 但概念是正确的

    【讨论】:

    • 您好,丹,感谢您的回复! :) 我使用这种方法面临的问题是撰写将在服务器上运行,并且我需要(由我的主管)提出一个只能使用 docker-compose up 命令的系统。我意识到这设置了一个巨大的障碍(我找不到解决方案),但我仍然希望有一个更优雅的解决方案来解决这个问题。无论如何感谢您的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2021-03-01
    相关资源
    最近更新 更多