我正在尝试使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之后,当我将浏览器指向Tracks URL时,得到的只是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/tracks33显然是www-data;默认情况下该目录归root:root拥有),但这仍然没有解决。

最佳答案

文件夹/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文件夹基于原始图像内容。

关于linux - 指定音量后音轨停止工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31957944/

10-09 10:16