【发布时间】:2020-08-13 10:46:30
【问题描述】:
我使用 docker 镜像
jrei/systemd-ubuntu:18.04
安装golang并设置github.com/remind101/assume-role
并在 uwsgi 上运行 Django 和 nginx
他的 Python 版本是 3.7,boto 版本是 2.49.0
另外,Django 要求安装在 venv 中。
在 ~/.aws/config 中设置 aws 配置文件并在 ~/.aws/credentials 中设置凭据后
服务器工作正常,但是boto包无法获取环境变量
Django 页面显示错误消息:
NoAuthHandlerFound at /
No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Handler'] Check your credentials
Request Method: GET
Request URL: http://localhost/
Django Version: 3.0.5
Exception Type: NoAuthHandlerFound
Exception Value:
No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Handler'] Check your credentials
Exception Location: /opt/web/camelot-portal-env/lib/python3.7/site-packages/boto/auth.py in get_auth_handler, line 1021
Python Executable: /opt/web/camelot-portal-env/bin/uwsgi
Python Version: 3.7.8
Python Path:
['.',
'',
'/usr/lib/python37.zip',
'/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/opt/web/camelot-portal-env/lib/python3.7/site-packages']
我检查了$AWS_ACCESS_KEY_ID 和$AWS_SECRET_ACCESS_KEY
两者都不为空,我尝试将$AWS_CREDENTIAL_FILE 配置两次,为~/.aws/config and ~/.aws/credentials
我两次重新启动 uwsgi 服务,boto 仍然没有得到任何密钥或密钥 ID。
最后,如果我在本地环境中安装需求并使用python manage.py runserver ,
boto包可以正常获取环境变量,一切正常。
哪一部分有问题?码头集装箱? uwsgi?还是venv?有什么想法吗?
【问题讨论】:
-
你在哪里运行 docker?是在 ECS 上吗?
-
在 Docker 中,您通常不会使用 systemd 或虚拟环境。 (将包安装到“系统”Python 中更简单,Docker 环境使您与其他 Python 安装隔离。)您能否提供minimal reproducible example 至少包含您的 Dockerfile 以及您如何运行映像的描述以及你是如何注入凭据的?
-
我在 docker 容器和 vm 上都试过了,都是同样的问题。问题出在 uwsgi 上。
标签: python django amazon-web-services docker