2

我在 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 使用 Caddy http 服务器而不是 docker 中的 nginx。这包括 SSL,并且不适用于带有 AWS 证书管理器 SSL 的 AWS 负载均衡器。所以我确实更改了默认的 production.yml 以引入 nginx 而不是 Caddy,按照这篇文章

4

1 回答 1

1

你的环境文件名有错误吗?当正确的是“.env” https://docs.docker.com/compose/env-file/时,您在问题中写了两次“evn” 。

此外,此环境变量仅可用于 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

如果您有正确配置的容器和环境变量,您可以通过连接到容器并检查 vars 是否通过来调试您的 vars。

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')
于 2018-05-16T03:42:33.837 回答