我正在尝试使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/tracks
(33
显然是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/