从 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')
我在 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')