来自docker的无效存储桶名称 - 组成EC2

时间:2018-05-16 03:23:08

标签: django cookiecutter-django

我在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。

1 个答案:

答案 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')