【问题标题】:AWS ECS PermissionError for Django Collectstatic after Fargate Update to 1.4Fargate 更新到 1.4 后 Django Collectstatic 的 AWS ECS PermissionError
【发布时间】:2021-03-23 23:12:55
【问题描述】:

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

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

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

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

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

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

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

任何建议将不胜感激,谢谢!

注意:我确保我的设置可以在本地环境中使用 使用模拟 app-proxy 的 docker-compose 文件进行代理 交互,所以我认为这与我的settings.py 或我的静态文件的配置方式无关。

编辑我刚刚了解到 AWS Fargate 从 1.3 更新到 1.4 并且 似乎是导致问题的原因。

【问题讨论】:

标签: django docker amazon-ecs permission-denied aws-fargate


【解决方案1】:

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

随着 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"]

就是这样,希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2020-03-21
    • 2020-09-05
    • 2020-03-15
    相关资源
    最近更新 更多