gpt4 book ai didi

django - Fargate 更新到 1.4 后 Django Collectstatic 的 AWS ECS PermissionError

转载 作者:行者123 更新时间:2023-12-04 17:19:56 25 4
gpt4 key购买 nike

我有一个 AWS ECS 任务,它运行一个 Django (Python) 应用程序和一个用于静态文件的 Proxy,这两个容器都在 Docker 上运行.

Django 有一个名为 collectstatic 的命令,它将所有静态文件复制到将由代理服务的共享文件夹中。

我已经运行此设置几个月没有任何问题,但在 2021 年 3 月 17 日左右,我注意到我的部署没有更新我的网站。

查看我的 Django 应用程序日志,我看到了错误:

PermissionError: [Errno 13] Permission denied: '/vol/web/static'

我最近没有进行任何配置更改,经过一周的实验、调试和挫折后,我注意到与我创建此设置所遵循的同一类(class)中的其他一些人同时开始遇到完全相同的问题(基本上一周前)。

目前我唯一的猜测是 AWS 本身一定发生了某些变化,但我不确定要寻找什么。

如有任何建议,我们将不胜感激!

Note: I made sure that my setup works on my local environment with theproxy using a docker-compose file that simulates the app-proxyinteraction, so I don't think this has anything to do with my settings.py or how my static files are configured.

EDIT I just learned that AWS Fargate updated from 1.3 to 1.4 and thatseems to be causing the issue.

最佳答案

好的,这个问题有 2 个主要解决方案。

随着 Fargate 更新,集群中容器之间的共享卷功能停止工作,除非在 docker 文件中明确定义。

一种解决方案是只锁定您的 Fargate 版本。当我使用 terraform 时,这对我有用。注意平台版本行:

resource "aws_ecs_service" "app" {
name = "${local.prefix}-app"
cluster = aws_ecs_cluster.main.name
task_definition = aws_ecs_task_definition.app.family
desired_count = 1
launch_type = "FARGATE"
platform_version = "1.3.0"

另一个解决方案是,在我的主应用程序(不是代理应用程序)的 docker 文件中,我必须在创建我的共享卷的部分添加这一行 VOLUME/vol/web:

RUN mkdir -p /vol/web/media
RUN mkdir -p /vol/web/static
RUN adduser -D user
RUN chown -R user:user /vol/
RUN chmod -R 755 /vol/web
USER user
VOLUME /vol/web

CMD ["entrypoint.sh"]

就这些了,希望对你有帮助!

关于django - Fargate 更新到 1.4 后 Django Collectstatic 的 AWS ECS PermissionError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66772579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com