2016-05-27 17 views
-1

私は今すべてのプロジェクトにdocker-composeを使用しています。とても便利。いくつかのdockerコマンドによる手動リンクよりもはるかに快適です。Docker-compose:環境変数をリンクすることの理解

リンク環境変数の背後にあるロジックは、私にはまだ明確ではありません。

例:このdocker-compose.ymlで:ノードアプリで

mongodb: 
    image: mongo 
    command: "--smallfiles --logpath=/dev/null" 
web: 
    build: . 
    command: npm start 
    volumes: 
    - .:/myapp 
    ports: 
    - "3001:3000" 
    links: 
    - mongodb 
    environment: 
    PORT: 3000 
    NODE_ENV: 'development' 

、私はMongoDBのURLを取得する必要があります。私console.log(process.env)が、私はそれが非常にランダム感じているので、多くのものを取得する場合と、(ちょうどdocker-compose関連のものを保持):

MONGODB_PORT_27017_TCP: 'tcp://172.17.0.2:27017', 
MYAPP_MONGODB_1_PORT_27017_TCP_PORT: '27017', 
MYAPP_MONGODB_1_PORT_27017_TCP_PROTO: 'tcp', 
MONGODB_ENV_MONGO_VERSION: '3.2.6', 
MONGODB_1_ENV_GOSU_VERSION: '1.7', 
'MYAPP_MONGODB_1_ENV_affinity:container': '=d5c9ebd7766dc954c412accec5ae334bfbe836c0ad0f430929c28d4cda1bcc0e', 
MYAPP_MONGODB_1_ENV_GPG_KEYS: 'DFFA3DCF326E302C4787673A01C4E7FAAAB2461C \t42F3E95A2C4F08279C4960ADD68FA50FEA312927', 
MYAPP_MONGODB_1_PORT_27017_TCP: 'tcp://172.17.0.2:27017', 
MONGODB_1_PORT: 'tcp://172.17.0.2:27017', 
MYAPP_MONGODB_1_ENV_MONGO_VERSION: '3.2.6', 
MONGODB_1_ENV_MONGO_MAJOR: '3.2', 
MONGODB_ENV_GOSU_VERSION: '1.7', 
MONGODB_1_PORT_27017_TCP_ADDR: '172.17.0.2', 
MONGODB_1_NAME: '/myapp_web_1/mongodb_1', 
MONGODB_1_PORT_27017_TCP_PORT: '27017', 
MONGODB_1_PORT_27017_TCP_PROTO: 'tcp', 
'MONGODB_1_ENV_affinity:container': '=d5c9ebd7766dc954c412accec5ae334bfbe836c0ad0f430929c28d4cda1bcc0e', 
MONGODB_PORT: 'tcp://172.17.0.2:27017', 
MONGODB_1_ENV_GPG_KEYS: 'DFFA3DCF326E302C4787673A01C4E7FAAAB2461C \t42F3E95A2C4F08279C4960ADD68FA50FEA312927', 
MYAPP_MONGODB_1_ENV_GOSU_VERSION: '1.7', 
MONGODB_ENV_MONGO_MAJOR: '3.2', 
MONGODB_PORT_27017_TCP_ADDR: '172.17.0.2', 
MONGODB_NAME: '/myapp_web_1/mongodb', 
MONGODB_1_PORT_27017_TCP: 'tcp://172.17.0.2:27017', 
MONGODB_PORT_27017_TCP_PORT: '27017', 
MONGODB_1_ENV_MONGO_VERSION: '3.2.6', 
MONGODB_PORT_27017_TCP_PROTO: 'tcp', 
MYAPP_MONGODB_1_PORT: 'tcp://172.17.0.2:27017', 
'MONGODB_ENV_affinity:container': '=d5c9ebd7766dc954c412accec5ae334bfbe836c0ad0f430929c28d4cda1bcc0e', 
MYAPP_MONGODB_1_ENV_MONGO_MAJOR: '3.2', 
MONGODB_ENV_GPG_KEYS: 'DFFA3DCF326E302C4787673A01C4E7FAAAB2461C \t42F3E95A2C4F08279C4960ADD68FA50FEA312927', 
MYAPP_MONGODB_1_PORT_27017_TCP_ADDR: '172.17.0.2', 
MYAPP_MONGODB_1_NAME: '/myapp_web_1/novatube_mongodb_1', 

選び、そしてなぜこれほど多くのエントリするのか分からないのですか?一般的なもの、またはMYAPPを使用する方が良いですか? MYAPPの名前はどこから来ますか?フォルダ名?

誰かがこれを明確にすることはできますか?

カスタムマッピングでdocker-compose.ymlファイルに必要なものをユーザーに定義させるのは簡単ではないでしょうか?以下のように:私はけれども感覚を持っていない可能性があります言っている何

links: 
    - mongodb: 
     - MONGOIP: IP 
     - MONGOPORT : PORT 

。 :-)

答えて

1

環境変数は、コンテナ間のリンクを定義する従来の方法です。新しいバージョンの作曲を使用している場合は、links宣言はまったく必要ありません。あなたのアプリケーションコンテナからmongodbに接続しようとすると、ホスト名としてサービスの名前(mongodb)を使用するだけで、(dockerの組み込みDNS解決を使用せずに/ etc/hostsをチェックする代わりに、 )

接頭辞がMYAPPである理由についてのご質問にお答えください。 Composeは、サービス名の先頭にフォルダ名(または「project」、compose nomenclature)を付けます。カスタムネットワークとボリュームを作成するときも同じことが行われます。

+1

これらの説明をお寄せいただきありがとうございます。私が正しく理解すれば、それは 'MYAPP'コンテナで、' mongo.connect( 'http:// mongodb') 'のようなものでmongoを呼び出します。 –

+0

それは正しいです:) – johnharris85

+0

それは素晴らしいよね! :-) –