动态服务django docker容器



我正在创建一个服务,其中django容器是根据需要生成的,供用户在线测试后端功能。

我想让生成的实例对主域的用户可用:

示例:用户生成暴露端口8000的容器userapp,它应该可以在我的域上访问mydomain.net/userapp/

我不知道正在运行的实例的数量,也不知道它们的名称。

我在这里找到了一个nginx-proxy容器,它动态地为nginx创建配置,以便为子域提供容器:

$ docker run -e VIRTUAL_HOST=userapp.mydomain.com…

我想让它在路径上可访问。我如何创建动态代理路径与nginx或django?

我用django-http-proxy解决了这个问题。

我可以继承HttpProxy并创建DynProxyView:

views.py

from httpproxy.views import HttpProxy
class DynProxyView(HttpProxy):
    def get_object(self):
        return Fiddle.objects.get(pk=self.kwargs['pk'])
    rewrite = True
    @property
    def base_url(self):
        url= self.request.scheme+"://localhost:" + str(self.get_object().port)
        print url
        return url
    def get_full_url(self, url):
        result = super(DynProxyView, self).get_full_url(url)
        return result[:-1] # To get rid of a pesky redundant slash

urls . py

...
url(r'^(?P<pk>[-w]+)/result/(?P<url>.*)$', DynProxyView.as_view(),name='result'),
...

models.py

class Fiddle(models.Model):
    name = models.CharField(max_length=20, unique=True)
    hash = models.CharField(max_length=32, null=True, blank=True)
    port = models.IntegerField(null=True, blank=True)

最新更新