我的应用使用了一些机密,就像数据库的密码一样。我不想在任何Docker文件或任何其他应用程序的文件中发布它。
是否可以在主机上设置环境变量,然后在我的应用程序的主机Docker容器上运行并使用Docker镜像中的主机环境变量?
我希望能够在我的Docker容器中输入类似的内容:
$ echo $DB_PASSWORD
但是DB_PASSWORD将在主机上设置。
主机与其容器之间是否共享环境变量?
答案 0 :(得分:2)
环境变量不会在docker容器和主机os之间自动共享。
您可以使用run命令的"undefined"
标志设置环境变量:
--env
要使用主机操作系统,环境变量不提供容器变量的值,将自动使用该变量的主机值。
$ docker run --env DB_PASSWORD="ohsosecret" someuser/someimage
答案 1 :(得分:0)
在这里,我发布了解决方案,我如何处理秘密。
# docker-compose-development.yml version: '2' services: app: image: app_development build: context: ./app dockerfile: Dockerfile.development links: - db environment: DB_USER: ${DB_DEVELOP_USER} DB_PASS: ${DB_DEVELOP_PASS} db: image: mysql:latest ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: ${DB_DEVELOP_USER} MYSQL_USER: root MYSQL_PASSWORD: ${DB_DEVELOP_PASS} MYSQL_DATABASE: app_development
# docker-compose-test.yml version: '2' services: app: image: app_development build: context: ./app dockerfile: Dockerfile.test links: - db environment: DB_USER: ${DB_TEST_USER} DB_PASS: ${DB_TEST_PASS} db: image: mysql:latest ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: ${DB_TEST_USER} MYSQL_USER: root MYSQL_PASSWORD: ${DB_TEST_PASS} MYSQL_DATABASE: app_test
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:
答案 2 :(得分:0)
您可以使用以下命令行语句共享主机环境变量
docker run --name mycontainer -e your_host_variable image-name
或者您可以使用文件从那里获取所有环境变量
有关更多详细信息,请参阅this,这是一个不错的博客。