Fargate更新至1.4后Django Collectstatic的AWS ECS许可错误
我有一个Fargate更新至1.4后Django Collectstatic的AWS ECS许可错误,django,docker,amazon-ecs,permission-denied,aws-fargate,Django,Docker,Amazon Ecs,Permission Denied,Aws Fargate,我有一个AWS ECS任务,它运行一个Django(Python)应用程序,还有一个代理用于静态文件,这两个容器都在Docker上运行 Django有一个名为collectstatic的命令,它将所有静态文件复制到将由代理提供服务的共享文件夹中 我已经运行这个设置几个月了,没有出现任何问题,但在2021年3月17日左右,我注意到我的部署没有更新我的网站 查看我的Django应用程序日志,我看到了错误: PermissionError: [Errno 13] Permission denied:
AWS ECS
任务,它运行一个Django
(Python)应用程序,还有一个代理
用于静态文件,这两个容器都在Docker上运行
Django有一个名为collectstatic
的命令,它将所有静态文件复制到将由代理提供服务的共享文件夹中
我已经运行这个设置几个月了,没有出现任何问题,但在2021年3月17日左右,我注意到我的部署没有更新我的网站
查看我的Django应用程序日志,我看到了错误:
PermissionError: [Errno 13] Permission denied: '/vol/web/static'
我最近没有做任何配置更改,经过一周的实验、调试和挫折之后,我注意到我创建此设置所遵循的同一课程中的其他一些人在同一时间(基本上是一周前)开始出现完全相同的问题
在这个时候,我唯一的猜测是AWS本身一定发生了一些变化,但我不确定该寻找什么
如有任何建议,将不胜感激,谢谢
注意:我确保我的设置在本地环境中使用
代理使用模拟应用程序代理的docker compose文件
交互,所以我认为这与我的settings.py
或静态文件的配置无关
编辑我刚刚了解到AWS Fargate从1.3更新到了1.4
似乎是问题的根源
好的,这个问题有两个主要的解决方案 使用Fargate update,集群中容器之间的共享卷功能停止工作,除非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"]
就这些,希望能有帮助 看起来容器文件没有像1.3中那样复制到1.4中的卷