如何从容器访问外部数据库?在连接字符串中硬编码是最好的方法吗?
# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string
如何从容器访问外部数据库?在连接字符串中硬编码是最好的方法吗?
# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string
当前回答
对于Amazon AWS ECS/ECR,您应该通过私有S3桶管理您的环境变量(特别是秘密变量)。请参阅如何使用Amazon S3和Docker管理基于Amazon EC2容器服务的应用程序的机密。
其他回答
有一个很好的方法可以将主机环境变量输送到Docker容器中:
env > env_file && docker run --env-file env_file image_name
要非常小心地使用这种技术,因为env > env_file会将所有主机env变量转储到env_file中,并使它们在运行的容器中可访问。
运行——rm -it——env-file <(bash -c 'env | grep <你的env数据>') 是一种grep存储在.env中的数据并将它们传递给Docker的方法,没有任何不安全的存储(所以你不能只查看Docker历史并获取密钥)。
假设你的。env中有很多AWS的东西,就像这样:
AWS_ACCESS_KEY: xxxxxxx
AWS_SECRET: xxxxxx
AWS_REGION: xxxxxx
使用docker run——rm -it——env-file <(bash -c 'env | grep AWS_')将抓取所有文件并安全地传递给容器内的用户。
您可以使用-e或——env作为参数,后面跟着键-值格式。
例如:
docker build -f file_name -e MYSQL_ROOT_PASSWORD=root
对于Amazon AWS ECS/ECR,您应该通过私有S3桶管理您的环境变量(特别是秘密变量)。请参阅如何使用Amazon S3和Docker管理基于Amazon EC2容器服务的应用程序的机密。
你可以在docker run ..这里提到的和勘误表中提到的命令。
然而,这种方法可能存在的缺点是,您的凭据将显示在您运行它的进程列表中。
为了让它更安全,你可以把你的凭证写在一个配置文件中,并像这里提到的那样使用——env-file运行docker。然后,您可以控制对该配置文件的访问,以便其他有权访问该机器的人不会看到您的凭据。