我正在运行以下命令:
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有关,但它没有任何具体的参考路径。
答案 0 :(得分:0)
从-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
的链接,所以您还可以在主机系统上看到这些文件。