当前位置: 首页 > 知识库问答 >
问题:

如何将环境变量传递给Docker容器?

秦才
2023-03-14

我是Docker的新手,不清楚如何从容器访问外部数据库。是在连接字符串中硬编码的最佳方法吗?

# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string

共有1个答案

仲孙思源
2023-03-14

您可以使用-e标志将环境变量传递给容器。

启动脚本中的示例:

sudo docker run -d -t -i -e REDIS_NAMESPACE='staging' \ 
-e POSTGRES_ENV_POSTGRES_PASSWORD='foo' \
-e POSTGRES_ENV_POSTGRES_USER='bar' \
-e POSTGRES_ENV_DB_NAME='mysite_staging' \
-e POSTGRES_PORT_5432_TCP_ADDR='docker-db-1.hidden.us-east-1.rds.amazonaws.com' \
-e SITE_URL='staging.mysite.com' \
-p 80:80 \
--link redis:redis \  
--name container_name dockerhub_id/image_name

或者,如果您不希望在命令行中有该值,而ps等将在该命令行中显示该值,则-e可以从当前环境中提取该值,如果您只给出该值而不给出=:

sudo PASSWORD='foo' docker run  [...] -e PASSWORD [...]
$ docker run --env-file ./env.list ubuntu bash

--env-file标志将文件名作为参数,并期望每一行都是var=val格式,模拟传递给--env的参数。注释行只需以#为前缀

 类似资料:
  • 我是Docker的新手,不清楚如何从容器访问外部数据库。是在连接字符串中硬编码的最佳方法吗?

  • 我是第一次和docker合作,我正在努力弄清楚这一切。 在我正在进行的这个项目中,我们在启动文件中广泛使用了Windows环境变量。为了将这些内容放入配置中,我们使用AddEnvironmentVariables(string prefix)方法,如下所示: 在localhost和Azure中,这是没有问题的,因为我们已经将它们添加到了这些环境中。但是我不能想出如何在我的docker容器中配置这些

  • 问题内容: 如何将主机环境变量(例如用户名和主机名)传递给dockerfile? 例如,如果我的用户名是: 如何编写Docker文件以获得相同的输出? 问题答案: 我遇到了同样的问题。我的解决方案是在docker-compose.yml内部提供变量,因为yml支持使用环境变量。 我认为这对我来说是最有效的方式,因为我不喜欢在命令行中使用类似以下内容一遍又一遍地键入它 在容器中,声明将无效,将设置为

  • 我正在使用GAE部署我的应用程序,我想把一些环境变量传递给我的GAE实例。例如,每次我使用DB时,分配当前是这样的: 这很好,但问题是它是一个共享代码,每次有人进行本地测试时,它都会更改路径,并将更改推送到存储库。当有人拉动新的更改时,它需要更改以发出db请求,因为每个人都有不同的套接字更改路径。因此,我创建了以下声明: 因此,如果某个人的系统中有一个环境变量,那么它会接受该变量并避免绝对路径。问

  • 我在Azure DevOps中有一个发布管道。这是从ACR中提取docker映像并发布到Web应用程序(linux容器)。所有工作都很好(容器按预期发布和运行),但是我似乎不能在运行时向容器传递任何自定义环境变量。 释放管道 在管道“Deploy Azure App Service”中的变量选项卡下,我添加了,然后在“App Settings”下添加了 有人知道如何在运行时通过Azure DevO

  • 问题内容: 我正在尝试使用单个,几个文件和几个文件为多个环境创建配置。我需要它为每个环境使用具有python依赖关系的其他文件。 假设我们在两个环境中创建服务:和。为此,我创建了以下文件结构: 目的是在容器的过程中实例化文件的专有名称。根据文档,我尝试了这种天真的方法,这种方法似乎不起作用: 将名称定义为环境变量: envs / dev.env: envs / prod.env: 在 Docker