是否有可能在Docker容器中获取主机的环境variables?

我的应用程序使用一些秘密 ,如密码到数据库。 我不想在任何Docker文件或任何其他应用程序的文件中发布它。

是否有可能在主机上设置环境variables,然后在我的应用程序上运行在这个主机的Docker容器上,并在Docker镜像里面使用主机的环境variables?

我想能够在我的Docker容器中得到如下所示:

$ echo $DB_PASSWORD 

但DB_PASSWORD将在主机上设置。

主机与其容器之间是否共享环境variables?

Docker容器和主机操作系统之间的环境variables不会自动共享。

你可以用run命令的--env标志来设置环境variables,但是:

 $ docker run --env DB_PASSWORD="ohsosecret" someuser/someimage 

要使用你的主机os的环境variables不提供一个容器variables的值,这个variables的主机值将被自动使用。

 $ docker run --env DB_PASSWORD someuser/someimage 

官方文件

在这里,我张贴我的解决scheme如何处理秘密

  1. 我在本地机器上开发,为全球环境的发展树立了秘密。
  2. 我通过受保护的Jenkins服务器将应用程序部署到testing/登台/生产环境。 Jenkins运行为每个testing/分期/生产设置环境variables的脚本。
  3. 对于每个环境,我都有特定的docker-compose-xxx.yml ,例如: docker -compose-development.ymldocker-compose-jenkins.ymldocker -compose-production.yml
  4. docker-compose-xxx.yml文件中,我使用本地环境variables,例如:
 #docker-compose-development.yml

版本:'2'
服务:
  应用:
    图片:app_development
    build立:
      上下文:./app
       dockerfile:Dockerfile.development
    链接:
       - D b
    环境:
       DB_USER:$ {DB_DEVELOP_USER}
       DB_PASS:$ {DB_DEVELOP_PASS}
   D b:
     image:mysql:latest
    端口:
       - “3306:3306”
    环境:
       MYSQL_ROOT_PASSWORD:$ {DB_DEVELOP_USER}
       MYSQL_USER:root
       MYSQL_PASSWORD:$ {DB_DEVELOP_PASS}
       MYSQL_DATABASE:app_development
 #docker-compose-test.yml

版本:'2'
服务:
  应用:
    图片:app_development
    build立:
      上下文:./app
       dockerfile:Dockerfile.test
    链接:
       - D b
    环境:
       DB_USER:$ {DB_TEST_USER}
       DB_PASS:$ {DB_TEST_PASS}
   D b:
     image:mysql:latest
    端口:
       - “3306:3306”
    环境:
       MYSQL_ROOT_PASSWORD:$ {DB_TEST_USER}
       MYSQL_USER:root
       MYSQL_PASSWORD:$ {DB_TEST_PASS}
       MYSQL_DATABASE:app_test
  1. 我使用这种方法来构buildRuby on Rails应用程序。 这个框架使用config / database.yml来设置一些机密数据(如数据库密码)。 提出的方法允许使用在docker-compose-xxx.yml文件中导出的环境variables:
    默认:&默认
      适配器:mysql2
      编码:utf8
      游泳池:5
       socket:/var/run/mysqld/mysqld.sock

    发展:
      适配器:mysql2
      编码:utf8
      游泳池:5
       socket:/var/run/mysqld/mysqld.sock
      数据库:app_development
      主机:'db'
      港口:3306
      用户名: 
      密码: 

    testing:
      适配器:mysql2
      编码:utf8
      游泳池:5
       socket:/var/run/mysqld/mysqld.sock
      数据库:app_test
      主机:'db'
      港口:3306
      用户名: 
      密码: