2016-12-07 11 views
1

私のアプリはデータベースにパスワードのようにの秘密を使用しています。 Dockerファイルや他のアプリのファイルの中に公開したくない。Dockerコンテナでホストの環境変数を取得することは可能ですか?

ホストマシンで環境変数を設定してから、このホストDockerコンテナを自分のアプリケーションで実行し、Dockerイメージ内でホストの環境変数を使用することはできますか?

私はドッカー容器内でのようなものを取得できるようにしたいと思います:

$ echo $DB_PASSWORD 

をしかしDB_PASSWORDは、ホストマシン上で設定されます。

ホストマシンとそのコンテナ間で環境変数を共有していますか?

答えて

2

環境変数は、ドッキングコンテナとホストOS間で自動的に共有されません。

あなたはしかし、runコマンドの--envフラグで環境変数を設定することができます。

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

がコンテナ変数の値を提供しない、あなたのホストOSの環境変数を使用するには、その変数に対するホスト値は次のようになります自動的に使用されます。ここで

$ docker run --env DB_PASSWORD someuser/someimage 

official documentation

+0

ありがとう:発表のアプローチは、ドッキングウィンドウ・コン・xxx.ymlファイルにエクスポートした環境変数を使用することができます。私はこの解決策を知っていましたが、私は*秘密*を扱うための回避策をいくつか使用します - 詳細は私自身の答えで(たぶんそれは誰かにとって役に立ちます)。 – nicq

0

私は秘密でどのように動作するか私の解決策を投稿してください。

  1. ローカルマシンで開発し、グローバル環境として開発するための秘密を設定しました。
  2. 私は、保護されたJenkinsサーバー経由で、テスト/ステージング/運用環境にアプリケーションを展開します。 Jenkinsは、テスト/ステージング/プロダクションごとに環境変数を設定するスクリプトを実行します。各環境に
  3. 、私は特定のドッキングウィンドウ-構成-xxx.yml、例えば持っている:ドッキングウィンドウ-構成-development.ymlドッカ - コン・jenkins.ymlドッキングウィンドウ・作曲・制作を。などYML
  4. でドッカ - コン・xxx.ymlファイル、私は例えば、ローカル環境変数を使用:
 
# 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 
  1. このアプローチを使用してRuby on Railsアプリケーションを構築します。このフレームワークでは、config/database.ymlを使用して、機密データ(データベースパスワードなど)が設定されています。答えを
 
    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: 
+0

これは適切な秘密管理ソリューションではなく、schrejの解決策ですが、同じ環境変数を使用することは、 'docker run'cliではなく' docker-compose'でパススルーします。秘密管理は1.13に入っています。そうしないと、金庫のようなソリューションをセットアップすることもできます。 – BMitch

+0

これは今QとA自身に尋ねるものですか?私はこれを最後の日によく見ました。 – Gabbax0r

関連する問題