Docker - 让我的应用程序使用机密而不是环境。变量
Docker - make my application use secrets instead of env. vars
我的 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 秘密,并且如果可能的话继续像上面显示的那样获取变量?是否可以在我的 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
感谢阅读
一种选择是使用您的文件创建一个秘密,然后使用源命令一次加载所有环境变量。
docker secret create mysecret <path_to_your_env_file>
source /run/secrets/mysecret // in your entrypoint.sh
我的 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 秘密,并且如果可能的话继续像上面显示的那样获取变量?是否可以在我的 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
感谢阅读
一种选择是使用您的文件创建一个秘密,然后使用源命令一次加载所有环境变量。
docker secret create mysecret <path_to_your_env_file>
source /run/secrets/mysecret // in your entrypoint.sh