使用位于另一个泊坞窗容器中的nginx提供静态文件

刚开始,我已经看到了这一点 。 但是他/她使用build ,而我使用image

我有一个docker-compose文件,它将我以前制作的图像拖到我的服务器上。

 app: restart: always image: some-app-image:latest 

nginxconfiguration

 location /static/ { root /data/app/web_interface; <--- this exists in some-app-image container } 

通常情况下,我会将一个卷装载到包含静态文件的应用程序映像上。

但是,由于应用程序容器本身具有静态文件,因此这变得多余。

所有的nginx容器需要做的是“同行”到应用程序容器中,并提供这些静态文件。 喜欢:

 location /static/ { root http://app:8000/web_interface; } 

要么

 location /static/ { root app/web_interface; } 

有没有办法从nginx容器中提供位于另一个容器中的静态文件?

我过去所有的想法:

从应用程序共享docker卷到nginx

您可以在应用程序的Dockefile创build一个卷,并在容器运行时复制Dockefile文件。 然后使用volumes_from与nginx容器共享卷。 这是一种丑陋,如果你的应用程序depends_on nginx,根本不起作用。 我会说这绝对是一个不行,因为它扩大你的应用程序容器时,它的工作非常糟糕。

将主机的静态文件映射到nginx容器的想法也不是最佳的。 你会有一个奇怪的步骤来处理它们。

独立的静态容器

构build另一个仅用于不同虚拟主机上的静态文件的nginx容器。 static.foo.bar

使用CDN

有大量的CDN,你可以把你的静态文件,大多数框架有插件来处理。 我有一些项目这样做。 很好用。

使用uWSGI

您可以使用--static-map来为uWSGI提供静态文件。 看文档 。 这是我最终做的,因为这是一个便宜,容易…和友好的,当涉及到缩放。 那么你可能也需要使用http-socket所以uWSGI会说http。