Docker - 让我的应用程序使用机密而不是 env。变量

用户11684966

我的 Django 应用程序使用了很多环境变量,总共大约 35 个。目前,所有这些都由我在启动应用程序堆栈之前获取的 .env 文件处理。我想我不必指出这是一种非常不安全的方式,特别是如果它与生产中的密钥有关......

现在我的问题是我真的不明白如何从 .env 文件切换到秘密,因为我不明白如何在我的容器中处理秘密。例如,Django 使用连接字符串连接我的 MySQL 数据库,如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
        'NAME': env.str('MYSQL_DB'),
        'USER': env.str('MYSQL_USER'),
        'PASSWORD': env.str('MYSQL_PWD'),
        'HOST': env.str('MYSQL_HOST'),
        'PORT': env.str('MYSQL_PORT'),
    }
}

大多数时候我使用“env.str”来获取我在开始时传递给容器的变量。那么我怎样才能让我的 Django 应用程序使用 docker secrets 并且如果可能的话继续像上面显示的那样获取 vars?是否有可能在我的 docker-entrypoint.sh 启动时加载所有需要的变量,如果是,如何实现?

我已经找到了这个解决方案:

if [ -f /run/secrets/MYSQL_PWD ]; then
  export MYSQL_PWD=$(< /run/secrets/MYSQL_PWD)
fi

if [ -f /run/secrets/MYSQL_USER ]; then
  export MYSQL_USER=$(< /run/secrets/MYSQL_USER)
fi

在启动时触发以使我的环境变量就位是否有意义?参见:https : //github.com/grafana/grafana-docker/issues/149

谢谢阅读

西里尔·G。

一种选择是使用您的文件创建一个秘密,然后使用源命令一次性加载所有环境变量。

docker secret create mysecret <path_to_your_env_file>

source /run/secrets/mysecret  // in your entrypoint.sh

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Dockerized Vue应用程序-我应该使用docker还是node env变量?

通过react-env插件为dockerize React应用程序读取docker环境变量?

如何在 nodeJS 应用程序中访问 docker ENV 变量

如何在 application.properties 文件中指定环境变量,以便我的应用程序可以在 Spring 中使用 Docker 容器 MySQL 而不是本地 MySQL?

docker-compose不能使用.env中的变量

在docker compose run命令中使用env变量

docker-compose使用.env文件中的环境变量

使用Docker和PHP从env文件加载环境变量

Docker-compose 在命令中使用 env_file 变量

如何在docker run中实现env变量替换并在剩余的env变量中相对使用一个变量

尝试从 Kubernetes 中的 env 变量设置机密的 aspnet 核心工作者 docker 容器的启动异常

我们可以在Docker文件COPY命令中使用本地env变量吗?

我的 React 应用程序正在使用 .env 文件中的值而不是 .env.local 文件

如何在docker env中使用ngnix反向代理通信UI和后端应用程序

如何使用 Docker 在 Airflow 中使用 .env 变量设置 S3 连接?

如何在带有golang的不同容器中使用docker-compose env文件变量?

如何在application.yml中使用Docker .env文件中设置的变量?

如何在docker-compose.yml的.env文件中使用环境变量?

使用Docker部署Nuxt,env变量未注册并且意外API调用?

使用ENV变量在appsettings.json中设置键-ASP.NET Core 3.1 Docker

使用docker run将值连接到现有的env变量

无法使用docker run -e或--env-file选项设置环境变量

Docker如何在构建过程中在Dockerfile中使用env_file变量

Docker-compose:在env文件中设置一个变量,并在Dockerfile中使用它

在 docker-compose 文件中使用的 Dockerfile 中定义 ENV 变量

docker build 没有使用 ENV 设置环境变量

Apache上的Docker,如何将变量传递到我的PHP Web应用程序?

Docker-.env中范围的设置变量

docker 文件中未替换的 env 变量