2015-08-12 3 views
0

Я пытаюсь получить 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, когда я укажу свой браузер на URL-адрес треков, все, что я получаю, это ошибка 404.

Я заметил, что /srv/tracks всегда пуст, в отличие от /var/www в корпусе без тома. Следует отметить, что docker logs показывает, что, когда я указываю объем, я получаю:

AH00112: Warning: DocumentRoot [/var/www/tracks/public] does not exist 

Я также получаю эту ошибку, даже если я вручную создать /srv/tracks/public. В чем проблема?

EDIT: Я больше не уверен, если разрешения являются проблемой. Я сделал sudo chmod 777 /srv/tracks, и я все равно получаю ту же ошибку. Я также пытался использовать sudo chgrp 33 /srv/tracks (33, по-видимому, www-data; по умолчанию каталог принадлежит root:root), и это все еще не решило его.

ответ

0

В папке /var/www содержатся данные, необходимые вашему приложению. Когда вы устанавливаете /srv/tracks в качестве объема на /var/www, его содержимое получает скрыто по содержанию ov /srv/tracks.

По вашему предупредительное сообщение:

AH00112: Внимание: DocumentRoot [/ вар/WWW/дорожки/общественности] не существует

Возможно, вы хотите сделать что-то вроде этого, а и поместить папку tracks как вложенная удар www вместо перезаписи всей www папки:

docker run ... -v /srv/tracks:/var/www/tracks ... 

В противном случае: если вам нужно сохранить файлы /srv/www, но используйте другую папку для замены www, вы можете поместить файлы tracks в другую папку, такую ​​как /bootstrap, во время сборки Dockerfile. И во время запуска контейнера вы просто копируете файлы /bootstrap в /srv/www, предоставляя свой собственный небольшой скрипт запуска.

EDIT: Убедитесь, что вы не установите пустой 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, что вы используете в качестве тома на основе исходных изображений содержимого.

+0

Я по-прежнему получаю ту же ошибку с '-v/srv/tracks:/var/www/tracks'. Кроме того, в файле docker уже есть команда 'VOLUME ["/var/www "]'. Я думал, что это должно было решить проблему сокрытия? – Superbest

+0

Итак, я пробовал комментировать [эту строку] (https: // github.com/staannoe/tracks/blob/master/Dockerfile # L50) в файле docker, а затем создайте и запустите это. У меня все еще такая же проблема. – Superbest

+0

Не могли бы вы предоставить нам содержимое вашей папки '/ srv/tracks', которую вы пытаетесь установить? Я предполагаю, что это супер-набор папок 'tracks', включенных в исходное изображение (в противном случае, когда файлы там отсутствовали, ошибка была бы очевидна). – h3nrik