我的應用程序使用一些機密,如密碼到數據庫。我不想在任何Docker文件或任何其他應用程序的文件中發佈它。是否有可能在Docker容器中獲取主機的環境變量?
是否可以在主機上設置環境變量,然後在該主機的Docker容器上運行我的應用程序並在Docker映像中使用主機的環境變量?
我希望能在我的碼頭工人容器像獲得:
$ echo $DB_PASSWORD
但DB_PASSWORD將主機上設置。
環境變量是否在主機及其容器之間共享?
我的應用程序使用一些機密,如密碼到數據庫。我不想在任何Docker文件或任何其他應用程序的文件中發佈它。是否有可能在Docker容器中獲取主機的環境變量?
是否可以在主機上設置環境變量,然後在該主機的Docker容器上運行我的應用程序並在Docker映像中使用主機的環境變量?
我希望能在我的碼頭工人容器像獲得:
$ echo $DB_PASSWORD
但DB_PASSWORD將主機上設置。
環境變量是否在主機及其容器之間共享?
環境變量不會在Docker容器和主機操作系統之間自動共享。
您可以設置環境變量與運行命令的--env
標誌,但:
$ docker run --env DB_PASSWORD="ohsosecret" someuser/someimage
要使用您的主機操作系統的環境變量不提供容器變量的值,該變量的主機值將是自動使用。
$ docker run --env DB_PASSWORD someuser/someimage
我在這裏發佈我的解決方案,我如何與祕密工作。
# 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:
感謝您的回答。我意識到這個解決方案,但我會使用一些解決方法如何處理*祕密* - 在我自己的答案更多的細節(也許這將是有用的人)。 – nicq