我想让Tracks Docker image工作。
当我运行给定的命令docker run -d --name=tracks -p 80:80 staannoe/tracks
时,一切都很顺利。但是,如果我添加了一个docker run -d --volume /srv/tracks:/var/www --name=tracks -p 80:80 staannoe/tracks
的卷,那么它会突然中断:执行docker run
后,当我将浏览器指向“跟踪网址”时,我得到的只是404错误。
我注意到/srv/tracks
也总是空的,与无卷情况下的/var/www
不同。值得注意的是,docker logs
显示当我指定音量时,我得到:
AH00112: Warning: DocumentRoot [/var/www/tracks/public] does not exist
即使我手动创建/srv/tracks/public
,我也会收到此错误。有什么问题?
编辑: 我不再确定权限是否是问题。我做了sudo chmod 777 /srv/tracks
我仍然得到同样的错误。我还尝试sudo chgrp 33 /srv/tracks
(33
显然是www-data
;默认情况下,目录由root:root
拥有,但这仍然无法解决。
答案 0 :(得分:0)
文件夹/var/www
似乎包含您的应用所需的数据。当您将/srv/tracks
作为卷装入/var/www
时,其内容会被内容ov /srv/tracks
隐藏。
根据您的警告信息:
AH00112:警告:DocumentRoot [/ var / www / tracks / public]不存在
可能您想要执行此类操作,并将tracks
文件夹作为子文件夹打击www
,而不是覆盖整个www
文件夹:
docker run ... -v /srv/tracks:/var/www/tracks ...
否则:如果您需要保留/srv/www
个文件但使用其他文件夹替换www
,则可以将tracks
个文件放入其他文件夹,例如/bootstrap
期间Dockerfile
版本。在容器启动期间,您只需通过提供自己的小启动脚本将/bootstrap
文件复制到/srv/www
。
编辑:确保您没有将tracks
空文件夹装入/var/www/tracks
。在该文件夹中有一些预期的文件。如果找不到它们,您将获得HTTP 404
。顶级需要这些文件夹:
$ docker exec -it tracks ls /var/www/tracks
COPYING README.md bin db lib public vendor
Gemfile Rakefile config doc log test
Gemfile.lock app config.ru features mkdocs.yml tmp
确保您用作卷的自定义tasks
文件夹基于原始图像内容。