从 docker-compose 到 EC2 的无效存储桶名称

Invalid bucket name from docker-compose up to EC2

我在 EC2 上创建了一个 docker 机器。

然后我创建了一个新的 cookiecutter-django app and left it plain vanilla. It's set to use .env for the environment variables. (Cookiecutter-django includes 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,遵循 this article.

环境文件名有误吗?当正确的是“.env”时,您在问题中写了两次 "evn" 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')