Nginx无法访问Docker卷挂载

时间:2020-03-15 13:20:29

标签: docker nginx docker-volume

我有一个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-fpmfastcgi位置,但这不是这里的问题。

我想要的是用图片装入主机卷(而不是将它们复制到 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配置,无法与容器内的主机卷正常工作?

1 个答案:

答案 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

很抱歉给您带来不便。