当前位置: 首页 > news >正文

【Docker知识】将环境变量传递到容器

一、说明

        程序通常通过与软件捆绑在一起的配置来控制操作,环境变量允许用户在运行时设置它们。但是,在 Docker 容器中运行进程会使事情变得复杂,那么如何将环境变量传递给容器呢?下面介绍若干个传递办法。

二、环境变量有何用途

        环境变量允许您将配置与应用程序的可执行文件分离。例如,您不想将生产数据库密码存储在您的代码库中——如果您这样做了,它会从 Git 中可见,并且任何有权访问您的代码的人都可以关闭您的数据库。

        相反,您使用一个环境变量来设置它,该变量存储一个简单的键值对,并允许您访问在同一 shell 会话中运行的任何应用程序中的值(它们不是全局可访问的)。这还有一个好处,就是能够轻松地为不同的环境定义不同的配置。例如,为开发和生产数据库使用单独的密钥,或使用不同的 API 端点。

        可以通过三种主要方式为 Docker 容器设置这些变量——使用 CLI 参数、.env 配置文件或通过 docker-compose。

三、参数随着启动命令带入

        用于启动 Docker 容器的命令 docker run 接受 ENV 变量作为参数。只需使用 -e 标志(--env 的简写)运行它,并传入 key=value 对:

sudo docker run 
-e POSTGRES_USER='postgres' 
-e POSTGRES_PASSWORD='password' 
...

        而且,如果您已经在运行该命令的环境中设置了这些环境变量,则可以直接按名称传递它们:

    // set variablePOSTGRES_PASSWORD='password'// use it laterdocker run -e POSTGRES_PASSWORD -e POSTGRES_USER ...

四、参数在.env 文件

        使用 CLI 参数传递变量效果很好,但它有一个缺点——这些变量在主机上是可见的。它们记录在命令历史记录中,并在已启动进程的进程列表中可见。

        Linux 有一个内置的方法来管理这个权限——文件访问。将变量存储在 .env 文件中允许您使用文件权限(chmod、chown)控制对该文件的访问。

        使用以下格式的变量创建一个 .env 文件,每个变量占一行:

    POSTGRES_PASSWORD='password'POSTGRES_USER='postgres'APPLICATION_URL='example.com'

        然后,使用 --env-file 标志将其传递给 docker run:  

   docker run --env-file ./envfile ...

五、参数随Docker-Compose启动带入

        当然,许多人不会直接使用 docker run 启动 Docker 容器,而是选择使用 docker-compose 文件来处理代表单个应用程序的多个容器的配置。

        要将环境变量传递给以这种方式启动的容器,您必须配置组合文件以将会话变量传递给 Docker 容器。这里的这个配置将POSTGRES_USER变量传递给构建环境和运行环境,如果不存在则设置一个默认值。

version: '3.1'
services:my-service: build:context: .args:- POSTGRES_USER=${POSTGRES_USER:-default}environment: - POSTGRES_USER=${POSTGRES_USER:-default}

        您需要在运行 docker-compose up 之前设置环境变量,否则将无法访问它们。您可以将它们存储在撰写文件中,但这通常会被跟踪和版本化,这违背了环境变量的目的。

六、随Kubernetes带入

        Kubernetes 是一个编排系统,可以处理跨网络运行数百个容器。它仍然使用 Docker,但你只会接触配置,因此直接传递环境变量是行不通的。

        相反,您可以在 Pod 的配置中定义它们:

apiVersion: v1
kind: Pod
metadata:name: example
spec:containers:- ...env:- name: SERVICE_PORTvalue: "80"- name: SERVICE_IPvalue: "172.17.0.1"

        Kubernetes 很复杂,有很多不同的方式来处理环境变量。要了解更多信息,您可以阅读他们关于将数据注入 Pod 的指南。

http://www.lryc.cn/news/3550.html

相关文章:

  • Allegro如何更改铜皮显示密度操作指导
  • ThinkPHP5酒店预订管理系统
  • 【MySQL】MyCat分库分表分片规则配置详解与实战(MySQL专栏启动)
  • OpenWrt路由器设置域名动态解析手把手教程
  • java流浪动物救助系统(毕业设计)
  • 阿里代码规范插件中,Apache Beanutils为什么被禁止使用?
  • NFC enable NFC使能流程
  • Redis实例绑定CPU物理核优化Redis性能
  • STC15中断系统介绍
  • 力扣HOT100 11-15
  • 深入浅出单调栈与单调队列
  • 深入C语言——实现可变参数函数
  • 41-Dockerfile-Dockerfile简介
  • 【408】操作系统 - 刻骨铭心自测题1(上)
  • 【老卫拆书】009期:Vue+Node肩挑全栈!《Node.js+Express+MongoDB+Vue.js全栈开发实战》开箱
  • 【LeetCode】动态规划总结
  • CAS详解.
  • Mock.js初步使用(浏览器端)
  • opencv保存图片
  • 【c++】数据类型
  • Elasticsearch的写的底层原理
  • 【网络编程】Java中的Socket
  • 有趣的Hack-A-Sat黑掉卫星挑战赛——跟踪卫星
  • Ubuntu安装配置Cuda和Pytorch gpu
  • 三、Java面向对象
  • pygame7 弹球游戏2
  • 计算机网络4:计算机网络体系结构
  • 1630_GNU的二进制分析工具nm简单使用探索
  • 【Redis】Redis高可用之Redis Cluster集群模式详解(Redis专栏启动)
  • 1.8 正则表达式