我在EC2上创建了一个docker机器。
然后我创建了一个新的cookiecutter-django应用程序并将其保留为普通的。它设置为使用.env作为环境变量。 (Cookiecutter-django包含django-environ用于访问环境变量。)
docker-compose -f production.yml build
工作正常。
docker-compose -f production.yml up
给出了这个错误:
django_1 | botocore.exceptions.ParamValidationError: Parameter validation failed:
django_1 | Invalid bucket name "": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$"
研究此错误,建议设置各种环境变量。所以我在.env中尝试了所有这些(我确实创建了一个名为pulsemanager的s3存储桶):
DJANGO_AWS_STORAGE_BUCKET_NAME=pulsemanager
AWS_S3_BUCKET_NAME_STATIC=pulsemanager
AWS_STORAGE_BUCKET_NAME=pulsemanager
无论我尝试什么,我都会遇到错误。
编辑:这不是普通的香草。默认情况下,cookiecutter-django在docker中使用Caddy http服务器而不是nginx。这包括SSL,并且不会在具有AWS证书管理器SSL的AWS负载均衡器后面工作。所以我确实更改了默认的production.yml,以便在this article之后引入nginx而不是Caddy。答案 0 :(得分:1)
您是否在环境文件名中出错?你在问题中写了两次“evn”,正确的是“.env”https://docs.docker.com/compose/env-file/。
此外,此环境变量仅适用于Docker-compose文件。这意味着,如果您需要将此变量传递给特定容器,则需要使用environment:
部分将此变量传递给容器,如下所示:
app:
- environment:
DJANGO_AWS_STORAGE_BUCKET_NAME=${DJANGO_AWS_STORAGE_BUCKET_NAME}
此外,您可以使用env_file:
为特定容器传递.env文件中的所有变量:https://docs.docker.com/compose/environment-variables/#the-env_file-configuration-option
app:
env_file:
- .env
如果您有正确配置的容器和环境变量,则可以通过连接到容器来调试变量,并检查变量是否已通过。
docker exec -ti CONTAINER_ID /bin/export
此外,您可能需要在django settings.py文件中添加配置。例如:
import os
DJANGO_AWS_STORAGE_BUCKET_NAME=os.environ.get('DJANGO_AWS_STORAGE_BUCKET_NAME')