我有一个Docker Compose设置来运行Nginx提供图片(jpg
个文件)。端口,协议等不相关。我的Nginx可以正常工作并提供这些文件:
web:
image: myweb
restart: always
volumes:
- ./logs/nginx:/var/log/nginx
ports:
...
图像myweb
继承自nginx
并添加此服务器所需的所有配置,基本上,Web根目录为:
index index.html index.php;
root /var/www/myweb/public;
我也在使用php:7.0-fpm
和fastcgi
位置,但这不是这里的问题。
我想要的是用图片装入主机卷(而不是将它们复制到 docker镜像),以便可以从外部进行更新(Dropbox同步或其他功能)。
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 位置)是静态网站,也安装在/var/www
上。
主机路径images-data/catalog-images
(相对于 docker-compose.yml 位置)是安装在/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配置,无法与容器内的主机卷正常工作?
答案 0 :(得分:0)
我想我终于解决了。 当我说
我也在使用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
很抱歉给您带来不便。