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