直接通过容器化的前端Web服务器提供静态文件?

时间:2015-05-27 22:06:15

标签: docker docker-compose

我有一个Docker Compose文件,其中包含一些基于PHP / FastCGI的Web应用程序,我想通过Nginx公开(总共3个容器)。如果两个Web应用程序容器将其静态文件存储在“/ var / www / html”中,如何让Nginx容器直接提供静态文件

我根本无法找到这样做的方法,这意味着我必须让两个网络应用程序提供自己的静态文件。如果我无法更改应用程序代码,则需要从FastCGI移至HTTP(如此处所示)。

如果有办法在不同的路径上安装容器卷,这可能是可行的,就像您可以使用主机系统一样。有没有办法完成这样的事情,除了通过主机系统做到这一点?

1 个答案:

答案 0 :(得分:3)

解决方案是将/var/www/html文件夹直接挂载到nginx以使用serving static files的nginx功能。我还建议简单使用data-container将html文件夹挂载到所有3个容器。最终的docker-compose.yml看起来像这样:

nginx:
  image: nginx
  ports:
   - 80:80
  links:
   - app1
   - app2
  volumes_from:
   - html
 app1:
   image: [app1]
   volumes_from:
    - html
 app2:
   image: [app2]
   volumes_from:
    - html
html:
  image: busybox
  volumes:
   - html:/var/www/html

并且nginx配置如下:

server {
    root /var/www/html;

    location / {
    }

    location ~ \.php {
        fastcgi_pass localhost:8000;
        ...
    }

    location /images/ {
        root /var/www/html/images;
    }

    location ~ \.(mp3|mp4) {
        root /var/www/html;
    }
}

以上配置将通过静态资源提供服务器/images文件夹和任何mp3/mp4文件。