【问题标题】:what causes a docker volume to be populated?是什么导致 docker 卷被填充?
【发布时间】:2016-08-25 05:52:35
【问题描述】:

我正在运行以下命令:

docker run --name wiki --link wiki-mdb:mysql -p 9081:80 -v /var/data/wikimedia/apache2:/etc/apache2 -v /var/data/wikimedia/wiki:/var/www/html -d synctree/mediawiki

容器死了,因为 apache2 在 /etc/apach2 中找不到它的配置文件 ...

好的,所以我在没有 apache2 卷的情况下再次运行命令:

docker run --name wiki --link wiki-mdb:mysql -p 9081:80 -v /var/data/wikimedia/wiki:/var/www/html -d synctree/mediawiki

它不仅可以工作...而且 /var/data/wikimedia/wiki 开始时为空,其中填充了所需的所有 php 文件。

那么有什么区别呢?为什么有些卷会填充来自容器的内容,而其他卷会更喜欢将空白文件夹挂载到容器内部配置之上?

我最终通过运行sudo docker cp 9f9ba217a2ec:/etc/apache2 ./ 来生成一个默认的 apache2 文件夹来解决我的问题......但是似乎应该有一些押韵或理由来说明为什么在卷中生成内容。

我认为它可能与Dockerfile 有关,但它没有对任何一个路径的任何具体引用。

【问题讨论】:

    标签: docker


    【解决方案1】:

    -v /var/data/wikimedia/apache2:/etc/apache2 开头将您的本地/var/data/wikimedia/apache2 与容器内的/etc/apache2 链接起来。这掩盖了在构建时创建的容器文件夹。因为/etc/apache2 是apache 寻找其配置的地方,所以将没有配置的/var/data/wikimedia/apache2 链接到/etc/apache2 会导致服务器找不到配置并且无法启动。

    将此卷排除在外不会掩盖在构建时创建的容器中已经存在的/etc/apache2 文件夹,从而保持构建时放置在Dockerfile 脚本中的配置文件完好无损.服务器找到合适的配置并按预期启动。

    我不是 php 的专家,尤其是在什么时候生成了哪些文件,但我怀疑随着服务器正常启动,php 文件被填充到容器中的 /var/www/html 中(显然)。因为后者只是指向您本地 /var/data/wikimedia/wiki 的链接,您也可以在您的主机系统上查看这些文件。

    【讨论】:

    • 我同意您回答的第一部分,/etc/apache2 屏蔽了当前内容...但是,我不确定您回答的第二部分是否正确...它也开始于空白文件夹,并应掩盖现有内容。 Web 服务器本身不生成 .php 内容。可能发生的情况是 apache2 被屏蔽了,因为它是容器映像的子层,并且只有在最顶层的映像中生成的内容才会填充到卷上……但我找不到该理论的文档。
    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 2022-06-15
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多