如何从容器访问外部数据库?在连接字符串中硬编码是最好的方法吗?
# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string
如何从容器访问外部数据库?在连接字符串中硬编码是最好的方法吗?
# 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
其他回答
使用-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/
我们也可以使用-e标志和$来使用主机环境变量:
在执行以下命令之前,需要导出(即设置)本地环境变量。
docker run -it -e MG_HOST=$MG_HOST \
-e MG_USER=$MG_USER \
-e MG_PASS=$MG_PASS \
-e MG_AUTH=$MG_AUTH \
-e MG_DB=$MG_DB \
-t image_tag_name_and_version
通过使用此方法,您可以使用给定的名称自动设置环境变量。在我的例子中,MG_HOST和MG_USER。
另外:
如果你正在使用Python,你可以通过以下方式访问Docker内部的这些环境变量:
import os
host = os.environ.get('MG_HOST')
username = os.environ.get('MG_USER')
password = os.environ.get('MG_PASS')
auth = os.environ.get('MG_AUTH')
database = os.environ.get('MG_DB')
要将环境导入到容器中,可以使用docker-compose中的env_file:。Yaml文件,或者你可以复制。env文件到容器中,然后用扩展库读取。
Python项目
你可以使用python-dotenv包:
pip install python-dotenv
然后在代码中:
import os
from dotenv import load_dotenv
load_dotenv()
SECRET_KEY = os.getenv("MY_SECRET")
去项目
github.com/joho/godotenv包:
go get github.com/joho/godotenv
在你的代码中:
package main
import (
"github.com/joho/godotenv"
"log"
"os"
)
func main() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
secretKey := os.Getenv("MY_SECRET")
}
下面是我解决这个问题的方法:
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
另一种方法是使用/usr/bin/env的功能:
docker run ubuntu env DEBUG=1 path/to/script.sh