在部署上将静态文件复制到卷上?
如何确保在部署Django应用程序期间创build的最新静态文件被复制到卷中? 我的web
容器定义了一个Django应用程序,它在构build时运行python manage.py collectstatic --noinput --clear
。 这将所有静态文件移动到/usr/src/app/static_files
目录中。 我希望这些静态文件在静态数据卷中可用,以便nginx可以为它们提供服务。 换句话说, /usr/src/app/static_files
的内容应该覆盖staticdata
卷中现有文件的内容。 否则,nginx将继续提供较旧的副本,如css文件和图像,而不是由Django收集的更新文件。
这可能吗? 感觉就像我为此目的而使用卷是错误的,因为它们的目的是持续数据。
编辑1:是否有一种方法来创build一个“临时卷”,当应用程序部署,这是应用程序被部署时被破坏? 如果是这样,我该怎么做,我怎么让这个卷也提供给nginx?
编辑2:如果我没有错误的select将使用绑定挂载,但我已经读过,应尽可能避免这些应用程序不依赖于主机的文件系统的结构。
version: '3.3' services: web: restart: always build: ./web env_file: - web-variables.env expose: - "8000" ports: - "8000:8000" volumes: - staticdata:/usr/src/app/static_files - staticdata:/usr/src/app/uploaded_files command: "./django-entrypoint.sh" depends_on: - database nginx: restart: always build: ./nginx ports: - "80:80" - "443:443" volumes: - staticdata:/data/www depends_on: - web database: image: postgres:9.2 restart: always volumes: - pgdata:/var/lib/postgresql/data ports: - "5432:5432" volumes: staticdata: pgdata:
是的,这是可能的 – 你几乎在那里。 通过将选项--clear
传递给collectstatic
,它将在收集静态文件之前清除目录。 这不是你想要的行为。 只需运行它没有标志:
python manage.py collectstatic --noinput
而且它应该只复制在目的地还不存在的新的静态文件。
outlook未来,您可能需要考虑为静态文件和媒体文件(用户生成的内容)分开容器,否则会造成混淆,如下所示:)
它似乎是默认的位置docker nginx
图像看是/usr/share/nginx/html
而不是/data/www
如你所愿。
所以只要改变这一行,它应该工作:
nginx: ... - staticdata:/usr/share/nginx/html ...
- Docker容器停止响应networking调用
- docker-compose用mongodb运行django
- Docker与多个Dockfiles和图像组成(Django + Angular)
- 如何configurationPydevtesting运行器来使用Docker
- 如何在Docker容器内访问主机上的postgres数据库?
- 无法从Django连接到docker,但可以直接连接到shell
- 在“docker-compose run”命令后,音量变化不是持续的(Django的collectstatic)
- 获取“无效的地址”错误上gunicorn绑定与我的服务器IP。 我在docker里试着这个
- 无法在Docker上安装Django