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

新手上路,请多包涵

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

 # Dockerfile
ENV DATABASE_URL amazon:rds/connection?string

原文由 AJcodez 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 586
2 个回答

您可以使用 -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 [...]

如果你有很多环境变量,特别是如果它们是保密的,你可以 使用 env-file

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

–env-file 标志将文件名作为参数,并期望每一行采用 VAR=VAL 格式,模仿传递给 –env 的参数。注释行只需要以# 为前缀

原文由 errata 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 -e 参数和 docker run .. 命令传递,如此 所述和@errata 所述。

但是,这种方法可能的缺点是您的凭据将显示在您运行它的进程列表中。

为了使其更安全,您可以将您的凭据写入配置文件并执行 docker run--env-file 如此 所述。然后您可以控制该配置文件的访问权限,以便其他有权访问该计算机的人看不到您的凭据。

原文由 Sabin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题