【发布时间】:2020-03-15 13:20:29
【问题描述】:
我有一个 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 配置以正常使用容器内的主机卷?
【问题讨论】:
标签: docker nginx docker-volume