Nginx не может получить доступ к Docker монтированию тома - PullRequest
0 голосов
/ 15 марта 2020

У меня есть Docker Compose setup для запуска Nginx обслуживания изображений (файлы jpg). Порт, протокол и т. Д. c. не актуально. My Nginx работает правильно и обслуживает эти файлы:

 web:
  image: myweb
  restart: always
  volumes:
 - ./logs/nginx:/var/log/nginx
  ports:
 ...

Образ myweb наследуется от nginx и добавляет всю конфигурацию, необходимую для этого сервера, в основном, сеть root: 1007 *

  index index.html index.php;
  root /var/www/myweb/public;

Я также использую местоположения php:7.0-fpm и fastcgi, но здесь это не проблема.

Я бы хотел смонтировать том хоста с помощью картинки (вместо того, чтобы копировать их в docker изображение ), чтобы иметь возможность обновлять его извне (Dropbox syn c или что-то еще).

 web:
  image: myweb
  restart: always
  volumes:
 - ./webcode:/var/www
 - ./logs/nginx:/var/log/nginx
 - ./images-data/catalog-images:/var/www/myweb/public/catalog/images
  ports:
 ...

Путь к хосту webcode (относительно docker -compose.yml location) - это сеть c, также установленная на /var/www. Путь к хосту images-data/catalog-images (относительно docker -compose.yml location) является каталогом картинок, смонтированным на /var/www/myweb/public/catalog/images.

Я не уверен, что это хорошая практика (смонтировать каталог хоста по тому же пути, где уже был смонтирован другой каталог хоста). Во всяком случае, я также пытался сохранить webcode как часть образа myweb, имеющего только один смонтированный том (фотографии один).

Монтирование webcode и включая изображения на нем, работает. И без какой-либо громкости, просто включая все вещи (веб-сайт и фотографии), также работает. Но мне понадобится отдельный том для фотографий. Я также попытался использовать символические ссылки в контейнере /var/www/myweb/public/catalog/images в направлении объема изображений. Но Nginx не отображает его, возможно, потому, что он отличается от /var/www.

Должен ли он принадлежать к root из nginx конфигурации сервера?

является то, что эти изображения не загружаются в браузере. Войдя в контейнер, я подтверждаю, что владение томом является правильным (www-data:www-data).

С точки зрения контейнера владение и содержимое одинаковы, если я подключаю том или если я скопировать в файловую систему контейнера. Но Nginx может видеть только файлы в файловой системе контейнера Docker.

Это нормальное поведение? Мне не хватает конфигурации Nginx для нормальной работы с томами хоста внутри контейнера?

1 Ответ

0 голосов
/ 16 марта 2020

Я думаю, что наконец-то решил. Когда я сказал

, я также использую php: 7.0-fpm и fastcgi местоположения , но это не проблема здесь .

Я был совершенно неправ: это был ключ: казнь php. Проблема была в том, что картинки были загружены index.php. Затем он был отправлен в службу fpm, где фотографии были недоступны !! Это моё docker-compose.yml определение для php сервиса:

 fpm:
  image: php7fpm:latest
  restart: always
  volumes:
  - ./webcode:/var/www

Дело в том, что объем картинок там не был виден. Я только что добавил этот том в список томов fpm, и проблема решена:

 fpm:
  image: php7fpm:latest
  restart: always
  volumes:
  - ./webcode:/var/www
  - ./images-data/catalog-images:/var/www/myweb/public/catalog/images

Приносим извинения за неудобства.

...