如何从容器访问外部数据库?在连接字符串中硬编码是最好的方法吗?

# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string

当前回答

下面是我解决这个问题的方法:

docker run --rm -ti -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN -e AWS_SECURITY_TOKEN amazon/aws-cli s3 ls

再举一个例子:

export VAR1=value1
export VAR2=value2

docker run --env VAR1 --env VAR2 ubuntu env | grep VAR

输出:

VAR1=value1
VAR2=value2

其他回答

运行——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 value设置环境变量(默认[])。

一个启动脚本的例子:

 docker run  -e myhost='localhost' -it busybox sh

如果您想从命令行使用多个环境,那么在每个环境变量之前使用-e标志。

例子:

 sudo docker run -d -t -i -e NAMESPACE='staging' -e PASSWORD='foo' busybox sh

注意:请确保将容器名称放在环境变量之后,而不是之前。

如果你需要设置很多变量,使用——env-file标志

例如,

 $ docker run --env-file ./my_env ubuntu bash

对于任何其他帮助,查看Docker帮助:

 $ docker run --help

官方文档: https://docs.docker.com/compose/environment-variables/

另一种方法是使用/usr/bin/env的功能:

docker run ubuntu env DEBUG=1 path/to/script.sh

为了通过docker-compose传递多个环境变量,一个环境文件也可以用在docker-compose文件中。

web:
 env_file:
  - web-variables.env

https://docs.docker.com/compose/environment-variables/#the-env_file-configuration-option

我遇到的问题是,我把——env文件放在命令的末尾

docker run -it --rm -p 8080:80 imagename --env-file ./env.list

Fix

docker run --env-file ./env.list -it --rm -p 8080:80 imagename

出现这种情况的原因是docker run命令具有以下签名。您可以看到选项出现在图像名称之前。映像名称看起来像是一个选项,但它是run命令的一个参数。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

码头工人运行