Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';s docker模式提供静态和动态内容_Docker - Fatal编程技术网

什么';s docker模式提供静态和动态内容

什么';s docker模式提供静态和动态内容,docker,Docker,我有一个简单的python/flask应用程序。在容器上是这样的 /var/www/app/ appl/ static/ ... app.py wsgi.py 我曾经让nginx在使用docker之前直接提供静态文件。像这样: location /static { alias /var/www/www.domain.com/appl/static; } location / { uwsgi_pass unix:///tmp/uwsgi/w

我有一个简单的python/flask应用程序。在
容器上是这样的

/var/www/app/
  appl/
    static/
      ...
    app.py
  wsgi.py
我曾经让nginx在使用docker之前直接提供静态文件。像这样:

location /static {
    alias  /var/www/www.domain.com/appl/static;
}

location / {
    uwsgi_pass unix:///tmp/uwsgi/www.domain.com.sock;
    include uwsgi_params;
}
但是现在静态文件在容器中,nginx无法访问

我可以想出两种可能的解决方案:

  • 像以前一样在容器内启动nginx,让主机nginx使用端口8000与容器nginx通信

  • (主机)/var/www/www.domain.com/static
    装载到
    (容器)/var/www/static
    并复制
    run.sh中的所有静态文件


  • docker更喜欢什么?

    我更喜欢第一种解决方案,因为它符合构建a的要素7:公开端口上的所有服务。通过Nginx运行两次请求肯定会有一些开销,但这可能不足以让人担心(如果是这样的话,只需向池中添加更多容器)。在容器启动后,使用自定义运行脚本执行主机端工作将很难使用Docker生态系统中的工具扩展应用程序。

    我不喜欢第一种解决方案,因为在一个容器上运行多个服务不是Docker方式

    总的来说,我们希望将静态文件夹公开给nginx,那么卷是最佳选择。但是有一些不同的方法可以做到这一点

  • 如您所述,将
    (主机)/var/www/www/www.domain.com/static
    装载到
    (容器)/var/www/static
    并复制
    run.sh

  • 使用nginx缓存,让nginx为您缓存静态文件。 例如,我们可以这样编写conf,让nginx在30分钟内解决静态内容

  • -

  • 信任uwsgi并使用uwsgi服务静态内容
    我会看看uwsgi。谢谢
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:30m max_size=1G;
    
    upstream app_upstream {
      server app:5000;
    }
    
    location /static {
        proxy_cache cache;
        proxy_cache_valid 30m;
        proxy_pass  http://app_upstream;
    }