Shell Nginx Gunicon Dash(Flask)应用程序似乎将结果缓存在某个地方(哪里??)

Shell Nginx Gunicon Dash(Flask)应用程序似乎将结果缓存在某个地方(哪里??),shell,docker,nginx,gunicorn,plotly-dash,Shell,Docker,Nginx,Gunicorn,Plotly Dash,我在运行Ubuntu18.04的Google虚拟机上安装了一个dash应用程序,可以直观地看到时间的推移 该应用程序基于三个docker容器: gunicorn提供的应用程序本身(在端口5000上) NGINX容器(从80->443->5000进行翻译) Certbot容器(用于获取和续订SSL证书) 现在我的问题是,无论我做什么,我得到的应用程序都是一个相当过时的应用程序版本(数据与我第一次部署它时完全相同,直到3月28日)。我尝试更改源数据以包含较新的数据,但也包含较少的数据,但没有看到任何

我在运行Ubuntu18.04的Google虚拟机上安装了一个dash应用程序,可以直观地看到时间的推移

该应用程序基于三个docker容器:

  • gunicorn提供的应用程序本身(在端口5000上)
  • NGINX容器(从80->443->5000进行翻译)
  • Certbot容器(用于获取和续订SSL证书)
  • 现在我的问题是,无论我做什么,我得到的应用程序都是一个相当过时的应用程序版本(数据与我第一次部署它时完全相同,直到3月28日)。我尝试更改源数据以包含较新的数据,但也包含较少的数据,但没有看到任何更改。我还尝试更改了Nginx关于代理缓冲区、代理缓冲区大小、代理缓冲区的设置,但没有效果

    这让我相信我得到了一个缓存的应用程序。我尝试了不同的浏览器/机器/设备,这让我相信缓存发生在服务器端

    我对Nginx、Gunicorn和Dash都不是很熟悉。但我发现非常奇怪的是,结果似乎被兑现了,甚至在docker compose up和down多次之后

    我错过了什么

    查找回购协议:

    基于以下
    docker compose
    文件:

    version: '3.7'
    
    services:
      web:
        build: ./services/web
        command: gunicorn --bind 0.0.0.0:5000 wsgi:app
        expose:
          - 5000
    
      nginx:
        image: nginx:1.17-alpine
        restart: unless-stopped
        volumes:
          - ./data/nginx:/etc/nginx/conf.d
          - ./data/certbot/conf:/etc/letsencrypt
          - ./data/certbot/www:/var/www/certbot
        ports:
          - "80:80"
          - "443:443"
        depends_on:
          - web
        command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
    
      certbot:
        image: certbot/certbot
        restart: unless-stopped
        volumes:
          - ./data/certbot/conf:/etc/letsencrypt
          - ./data/certbot/www:/var/www/certbot
        entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
    
    可能是因为web运行复制命令来复制整个目录,包括
    data.csv

    因此,如果在主机上的该目录中放置新的
    data.csv
    ,则只有在执行
    docker compose build
    时,才会将其复制到映像中

    您可能可以通过向
    web
    服务添加卷装载,并将
    data.csv
    放在其中来修复此问题,从而允许您在主机上更新该文件,然后发出
    docker compose restart web

    为了避免发出重新启动命令,您可能必须更改编码方式:

    def load_data():
        global data
        _ = pd.read_csv(os.path.join(os.path.dirname(__file__), '../data.csv'))
        return _
    
    data = load_data()
    

    如果您需要进一步的建议,请告诉我。

    您太棒了!我猜有时候你只是在寻找完全错误的东西,而忽略了显而易见的东西(比如必须重建图像或装载数据)。谢谢大家!@法比安·博斯勒的第二双眼睛从来都不是坏事:-)当你在这里的时候,这是一个完全无关的话题。以前我只使用单个docker容器,我将它们上传到注册表,然后在目标机器上提取它们。现在,docker compose还能用吗?据我所知,docker compose将上载到docker hub,而不是我自己的注册表,对吗?干杯,顺便说一句。我想把你添加到某个地方作为联系人:)我的联系人数据可以在这里@FabianBosler找到。我在这里发布了一些更新,但有点长,所以很快会记录一个关于你回购的问题,以回答这些进一步的问题:-)