Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 是否可以获得主机';Docker容器中的环境变量?_Ruby On Rails_Docker - Fatal编程技术网

Ruby on rails 是否可以获得主机';Docker容器中的环境变量?

Ruby on rails 是否可以获得主机';Docker容器中的环境变量?,ruby-on-rails,docker,Ruby On Rails,Docker,我的应用程序使用了一些秘密,比如数据库密码。我不想在任何Docker文件或任何其他应用程序的文件中发布它 是否可以在主机上设置环境变量,然后使用我的应用程序在此主机Docker容器上运行,并在Docker映像中使用主机的环境变量 我希望能够在我的Docker容器中获得如下内容: $ echo $DB_PASSWORD 但DB_密码将在主机上设置 主机及其容器之间是否共享环境变量?docker容器和主机操作系统之间不会自动共享环境变量 您可以使用run命令的--env标志设置环境变量,不过: $

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

是否可以在主机上设置环境变量,然后使用我的应用程序在此主机Docker容器上运行,并在Docker映像中使用主机的环境变量

我希望能够在我的Docker容器中获得如下内容:

$ echo $DB_PASSWORD
但DB_密码将在主机上设置


主机及其容器之间是否共享环境变量?

docker容器和主机操作系统之间不会自动共享环境变量

您可以使用run命令的
--env
标志设置环境变量,不过:

$ docker run --env DB_PASSWORD="ohsosecret" someuser/someimage
若要使用主机操作系统环境变量,请不要为容器变量提供值,将自动使用该变量的主机值

$ docker run --env DB_PASSWORD someuser/someimage

docker容器和主机操作系统之间不会自动共享环境变量

您可以使用run命令的
--env
标志设置环境变量,不过:

$ docker run --env DB_PASSWORD="ohsosecret" someuser/someimage
若要使用主机操作系统环境变量,请不要为容器变量提供值,将自动使用该变量的主机值

$ docker run --env DB_PASSWORD someuser/someimage

在这里,我发布了我如何处理机密的解决方案

  • 我在我的本地机器上开发,我为作为全球环境开发设定了秘密
  • 我通过受保护的Jenkins服务器将应用程序部署到测试/登台/生产环境。Jenkins运行脚本,该脚本为每个测试/登台/生产设置环境变量
  • 对于每个环境,我都有特定的docker-compose xxx.yml,例如:docker-compose-development.yml、docker-compose-jenkins.yml、docker-compose-production.yml等
  • 在docker compose xxx.yml文件中,我使用本地环境变量,例如:
  • #docker-compose-development.yml 版本:“2” 服务: 应用程序: 图片:应用程序开发 建造: 上下文:./app dockerfile:dockerfile.development 链接: -分贝 环境: DB_用户:${DB_开发_用户} DB_PASS:${DB_DEVELOP_PASS} db: 图片:mysql:最新版本 端口: - "3306:3306" 环境: MYSQL\u ROOT\u密码:${DB\u DEVELOP\u USER} MYSQL\u用户:root MYSQL_密码:${DB_DEVELOP_PASS} MYSQL_数据库:应用程序开发 #docker-compose-test.yml 版本:“2” 服务: 应用程序: 图片:应用程序开发 建造: 上下文:./app dockerfile:dockerfile.test 链接: -分贝 环境: DB_用户:${DB_测试_用户} DB_PASS:${DB_TEST_PASS} db: 图片:mysql:最新版本 端口: - "3306:3306" 环境: MYSQL\u ROOT\u密码:${DB\u TEST\u USER} MYSQL\u用户:root MYSQL_密码:${DB_测试_通过} MYSQL_数据库:应用程序_测试
  • 我使用这种方法构建RubyonRails应用程序。这个框架使用config/database.yml,其中设置了一些机密数据(如数据库密码)。提出的方法允许使用docker-compose-xxx.yml文件中导出的环境变量:
  • 默认值:&默认值 适配器:mysql2 编码:utf8 游泳池:5 套接字:/var/run/mysqld/mysqld.sock 发展: 适配器:mysql2 编码:utf8 游泳池:5 套接字:/var/run/mysqld/mysqld.sock 数据库:应用程序开发 主机:“db” 港口:3306 用户名: 密码: 测试: 适配器:mysql2 编码:utf8 游泳池:5 套接字:/var/run/mysqld/mysqld.sock 数据库:app_测试 主机:“db” 港口:3306 用户名: 密码:
    在这里我发布了我的解决方案,我是如何处理秘密的

  • 我在我的本地机器上开发,我为作为全球环境开发设定了秘密
  • 我通过受保护的Jenkins服务器将应用程序部署到测试/登台/生产环境。Jenkins运行脚本,该脚本为每个测试/登台/生产设置环境变量
  • 对于每个环境,我都有特定的docker-compose xxx.yml,例如:docker-compose-development.yml、docker-compose-jenkins.yml、docker-compose-production.yml等
  • 在docker compose xxx.yml文件中,我使用本地环境变量,例如:
  • #docker-compose-development.yml 版本:“2” 服务: 应用程序: 图片:应用程序开发 建造: 上下文:./app dockerfile:dockerfile.development 链接: -分贝 环境: DB_用户:${DB_开发_用户} DB_PASS:${DB_DEVELOP_PASS} db: 图片:mysql:最新版本 端口: - "3306:3306" 环境: MYSQL\u ROOT\u密码:${DB\u DEVELOP\u USER} MYSQL\u用户:root MYSQL_密码:${DB_DEVELOP_PASS} MYSQL_数据库:应用程序开发 #docker-compose-test.yml 版本:“2” 服务: 应用程序: 图片:应用程序开发 建造: 上下文:./app dockerfile:dockerfile.test 链接: -分贝 环境: DB_用户:${DB_测试_用户} DB_PASS:${DB_TEST_PASS} db: 图片:mysql:最新版本 端口: - "3306:3306" 环境: MYSQL\u ROOT\u密码:${DB\u TEST\u USER} MYSQL\u用户:root MYSQL_密码:${DB_测试_通过} MYSQL_数据库:应用程序_测试
  • 我使用这种方法构建RubyonRails应用程序。这个框架使用config/database.yml,其中设置了一些机密数据(如数据库密码)。提出的方法允许使用docker-compose-xxx.yml文件中导出的环境变量:
  • 默认值:&默认值 适配器:mysql2 编码:utf8 游泳池:5 套接字:/var/run/mysqld/mysqld.sock 发展: 适配器:mysql2 编码:utf8 游泳池:5 套接字:/var/run/mysqld/mysqld.sock 数据库:应用程序开发 主机:“db” 港口:3306 用户名: 密码: 测试: 适配器 default: &default adapter: mysql2 encoding: utf8 pool: 5 socket: /var/run/mysqld/mysqld.sock development: adapter: mysql2 encoding: utf8 pool: 5 socket: /var/run/mysqld/mysqld.sock database: app_development host: 'db' port: 3306 username: password: test: adapter: mysql2 encoding: utf8 pool: 5 socket: /var/run/mysqld/mysqld.sock database: app_test host: 'db' port: 3306 username: password:
    docker run --name mycontainer -e your_host_variable image-name