Compose: docker-compose.ymlの環境倉数を補間したす

䜜成日 2015幎04月30日  Â·  109コメント  Â·  ゜ヌス: docker/compose

叀いものはかなり倚くの荷物を蓄積しおいるので、私はこれのために新しい問題を䜜成しおいたす。

docker-compose.ymlの任意の*構成゚ントリの倀に環境倉数を枡すこずができるはずです。 倚くの人がやりたいず思っおいたす。移怍性に優れおおり、混乱を匕き起こさないこずに満足しおいたす。

私はいく぀かの蚈算がありたす。

必須の倉数ずオプションのデフォルト

環境に存圚しなければならない倉数、぀たり、存圚しない堎合はComposeが実行を拒吊するこずを指定できるず䟿利です。 ただし、これは倚くの堎合は面倒なので、明瀺的に有効にするか、デフォルト倀を指定できるようにする必芁がありたす。

MVPの実装にはどちらの機胜も必芁ありたせんが、䞋䜍互換性のある方法で䞡方を実装するための明確なパスが必芁です。

構文

重量がない限り、確立された暙準を実装する匷力なケヌスがありたす。機胜に察する芁件は最小限です。

  • POSIXパラメヌタの拡匵はOKです。 機胜が倚すぎたすが、それらのサブセットを実装できたす。

    • ${VARIABLE} - VARIABLEが蚭定されおいない堎合、空の文字列を出力したす

    • ${VARIABLE-default} - VARIABLEが蚭定されおいない堎合、 default出力したす

    • ${VARIABLE?} - VARIABLEが蚭定されおいない堎合

https://github.com/docker/compose/pull/845は、Bashスタむルの${VARIABLE:default}構文を実装したした。これは、POSIXパラメヌタヌの拡匵に䌌おいたすが、わずかに異なりたす。

実装

Pythonのos.path.expandvars関数は、POSIXパラメヌタヌ拡匵の最も基本的なケヌスを実装したす。

>>> from os.path import expandvars
>>> expandvars('${HOME}')
'/Users/aanand'

ただし、少なくずも2぀の問題がありたす。

  1. 未蚭定の倉数は空の文字列に展開されたせん-代わりに、展開されたせん。

`` `

expandvars '$ {UNSET}'
'$ {UNSET}'
`` `

  1. 䞍正な圢匏の構文ぱラヌになりたせん-代わりに、拡匵も行われたせん。

`` `

expandvars '$ {HOME'
'$ {HOME'
`` `

これたでのずころ、 https//github.com/docker/compose/pull/845が最も近いものですが、正芏衚珟に䟝存する実装には基本的に譊戒しおいたす。 テンプレヌト䜜成は簡単な仕事ではなく、人々はあらゆる皮類の壊れたものを入れようずしおいるので、堅牢で厳密で、圹立぀メッセヌゞで゚ラヌが発生するものが必芁です。 2぀の重芁な芁件

  • 誰かが䞍正な圢匏のものを入れた堎合、Composeは実行されたせん。
  • テンプレヌト構文で䜿甚されおいる特殊文字を゚スケヌプするこずができたす。

Bashのような倉数補間の優れたPython実装がすでに存圚する可胜性がありたす。そうでない堎合は、Composeコヌドベヌスを肥倧化させるよりもスタンドアロンで䜕かを䜜成する方がはるかに望たしいでしょう。

*実際、補間を蚱可すべきではない構成キヌはありたすか

kinenhancement kinfeature

最も参考になるコメント

私のナヌスケヌスは、 volumesで$PWDを蚱可するこずです。これにより、チヌム内のすべおの開発者は、どこにでもリポゞトリを耇補でき、パスは正しくマりントされたす。

elasticsearch:
  image: zinvoice/elasticsearch
  volumes:
    - $PWD:/app

党おのコメント109件

これらの確立されたUNIX暙準をどこたで進めたいですか FWIW、これは事実䞊の暙準ではなく、実際の暙準です。

DockerfilesでPOSIXパラメヌタヌ展開を誀っお䜿甚しようずする人がいるので、それらがdocker-compose.ymlでサポヌトされおいれば、私は幞せなキャンピングカヌになりたす。

@kojiromikeうヌん、POSIXパラメヌタの拡匵は実際に私が目指しおいたものですが、ドキュメントを読むず、構文/セマンティクスを芚えおいなかったようです。

線集説明の構文に぀いおの考えを曎新したした。

私は叀いスレッドをフォロヌしおきたしたが、この機胜が緊急に必芁でした。 最埌に、苊痛が倧きすぎたため、POSIXスタむルの倉数を眮き換えるyamlプリプロセッサbahsスクリプトを䜜成したした。 正垞に動䜜したしたが、問題が1぀あったため、最終的には䜿甚を䞭止したした。 最終的な解決策を埗る前に、最初にプリプロセッサを実行し、すべおのパラメヌタを蚭定する必芁がありたす。 珟圚、docker yamlextends機胜を䜿甚しおいたす。 これにより、実際の構成をチェックむンしお、タヌゲットで実行するこずができたす。 私たちは䜕が起こるかをよく知っおいたす。

私はdocker-composeの受け枡し倉数のサポヌタヌでしたが、今はよくわかりたせん。

理想的な解決策ずしお、Dockerの拡匵が正しく行われるこずを望んでいたす。 ある意味では、それは䞡方に適合する゜リュヌションになるでしょう。 では、dockerextendsで䜕が壊れおいるのでしょうか 基本的に、継承されたファむルにすべおの゚ントリを曞き蟌む必芁があるずいう事実です。 オヌバヌラむドしたいものだけを入力するマヌゞではありたせん。

実際の䟋ずそれがどれほど冗長であるかを芋おください。 重芁なのは2行だけです。

#Common 
elasticsearch:
  image: zinvoice/elasticsearch
  hostname: elasticsearch
  restart: always
  dns: 172.17.42.1
  ports:
    - "9200:9200"
  volumes:
    - /etc/localtime:/etc/localtime:ro
    - /etc/timezone:/etc/timezone:ro
    - /data/elasticsearch:/opt/elasticsearch/data/elasticsearch

logstash:
  image: zinvoice/logstash
  hostname: logstash
  dns: 172.17.42.1
  restart: always
  ports:
    - "5000:5000"
  volumes:
    - /etc/localtime:/etc/localtime:ro
    - /etc/timezone:/etc/timezone:ro

kibana:
  image: zinvoice/kibana
  hostname: kibana
  dns: 172.17.42.1
  restart: always
  ports:
    - "5601:5601"
  volumes:
    - /etc/localtime:/etc/localtime:ro
    - /etc/timezone:/etc/timezone:ro

logspout:
  image: zinvoice/logspout
  hostname: logspout
  command: logstash://logstash.docker:5000
  restart: always
  dns: 172.17.42.1
  ports:
    - "8003:8000"
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock

doorman:
  image: zinvoice/doorman
  hostname: doorman
  restart:  always
  dns: 172.17.42.1
  ports:
    - "8085:8085"
# inherited
elasticsearch:
  extends:
    file: ../common.yml
    service: elasticsearch

logstash:
  extends:
    file: ../common.yml
    service: logstash

kibana:
  extends:
    file: ../common.yml
    service: kibana

logspout:
  extends:
    file: ../common.yml
    service: logspout

doorman:
  environment:
    - DOORMAN_GITHUB_APPID=xxxxxxxx
    - DOORMAN_GITHUB_APPSECRET=xxxxxx
  links:
    - nginxtrusted
  extends:
    file: ../common.yml
    service: doorman

したがっお、私の掚奚する修正dockerは、冗長性を枛らすために拡匵したす。 YAMLは必芁なすべおの機胜を提䟛するため、それほど倚くのコヌドを蚘述する必芁はありたせん。 暙準のYAMLを䜿甚する堎合、ファむルは他のツヌルやUIで分析たたは䜜成できたす。

YAMLの「ノヌドアンカヌ」ずYAMLの「ファむルマヌゞ」を芋おください。これは完璧な゜リュヌションかもしれたせん。

参考この議論は珟圚1380で継続䞭

@ Vad1mo extendsがあなたのケヌスでは䞍十分であるこずに同意したす。 その゚クスペリ゚ンスを改善するためにできるこずはたくさんありたす。別の問題を開いお、ここで脇道に远い蟌たれないようにしおいただけたせんか。

もちろん これが簡単で゚レガントな代替手段になる可胜性があるこずを匷調したかっただけです。
compose extendsで倉数の受け枡しが半分になりすぎる堎合、compose-extendsを改善するず、倉数の受け枡しが廃止されたす。 理解する抂念が少ないほど、ナヌザヌは簡単に理解できたす。

私のナヌスケヌスは、 volumesで$PWDを蚱可するこずです。これにより、チヌム内のすべおの開発者は、どこにでもリポゞトリを耇補でき、パスは正しくマりントされたす。

elasticsearch:
  image: zinvoice/elasticsearch
  volumes:
    - $PWD:/app

@mattesすでにサポヌトされおいるず思いたすが、 .:/appもサポヌトされおいるず思いたす

@aanand PoCずしお、 PythonでPOSIXPEのダヌティハックアップを行いたした。 土曜日に。

@kojiromikeよさそうだ。 続行する予定がある堎合はお知らせください。

@aanand意図しおいたすが、shlexを䜿甚するのは悪い考えだったず思いたす。 もちろん、バグレポヌトやPRは倧歓迎です。

@dnephin $HOME / ~どうですか

@nafgこれらは䞡方ずもボリュヌムのホストパスでサポヌトされおいたす

@dnephin興味深い、b / cどういうわけか私は '$ HOME'ずいう名前のディレクトリに

@aanand "$ { VARIABLEdefault }"提案のように、global_extendsたたは "import"を䜿甚するず、これはかなり匷力になりたす。

Qこれにより、ホストに公開されるポヌト番号を指定できたすか のように-"$ {WEB_ PORT80 }80"
ナヌスケヌスは、同じマシン/クラスタヌ䞊でアプリの耇数のむンスタンスを簡単に起動できるようにするこずです。通垞は、異なるポヌトをリッスンするか、異なるロヌカルドメむン名に割り圓おられたす。

はい、あなたはそれをするこずができるでしょう。

docker-compose scale my_app=3ず䞀緒にボリュヌム内の倉数を䜿甚したいず思いたす。 私はこれを持っおいたすdocker-compose.yml

server:
  image: alexanderilyin/docker-teamcity-server
  ports:
   - "8111:8111"
  volumes:
    - .TeamCity:/root/.BuildServer
  links:
   - mysql
mysql:
  image: alexanderilyin/docker-mysql
  volumes:
    - .MySQL:/var/lib/mysql
  environment:
    MYSQL_DATABASE: teamcity
    MYSQL_USER: teamcity
    MYSQL_PASSWORD: teamcity
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
agent:
  image: alexanderilyin/docker-teamcity-agent
  links:
   - server

たた、゚ヌゞェントにscaleを䜿甚し、゚ヌゞェントに動的ボリュヌムを䜿甚しお、起動間でデヌタを保持できるようにしたいず考えおいたす。次に䟋を瀺したす。

agent:
  image: alexanderilyin/docker-teamcity-agent
  volumes:
    - .agent_{$AGENT_INSTANCE_ID}:/opt/buildAgent
  links:
   - server

画像名の䞀郚ずしお倉数を補間するこずも可胜だず思いたす
https://github.com/openshift/source-to-imageを䜿甚しお、すべおのブランチのCIでロヌカルコンテナヌを構築し、docker-composeを䜿甚しおテストを実行しおいたす。
動的むメヌゞを䜿甚したテストの実行は、docker-composeでは非垞に耇雑であり、手動のテンプレヌトレンダリングが必芁です。

しかし、 COMPOSE_PROJECT_NAMEを蚭定しお、実行ごずのプレフィックスを制埡し、それをすでに正しく実行できるようにするこずができたすか もしそうなら、名前の呚りに耇雑なロゞックず読み取り䞍可胜なymlファむルを甚意する必芁はありたせん。

@andreromはフォロヌしたせん。 代わりに画像プロパティを蚭定しようずしおいるずきに、次のSets the project name, which is prepended to the name of every container started by Composeを制埡するドキュメントによるず

web:
  image: <I_AM_DYNAMIC>

ああ、私の間違い。

あなたが意味したず思った

<I_AM_DYNAMIC>:
  image: nginx

動的なむメヌゞおよびビルド参照は、確かに非垞に理にかなっおいたす。 たずえば、プログラミング蚀語のデバッグベヌスコンテナず非デバッグベヌスコンテナを切り替えるこずは、このための良いナヌスケヌスです。

远加のナヌスケヌス_@ Maxim-Filimonovが念頭に眮いおいる可胜性がありたす_画像を䜿甚するタグをオヌバヌラむドできるため、デフォルトでlatestを䜿甚できたすが、ymlを倉曎せずに他の䜕かを簡単にテストするように倉曎したすファむル_基本的にCIのナヌスケヌスに必芁_。

@andreromはたさに私たちのナヌスケヌスです+1

これは次のような堎合にも機胜したすか

web:
  environment:
    - FOO=${whoami}

@ k0377これは実際にはシェルによっお凊理されるものであるため、そうなるずは思いたせんが、結果を環境倉数に远加しお䜿甚するこずができたす。

この特定のケヌスでは、 $USER環境倉数はおそらく同じものを提䟛したす。

@aanand既存の既存のテンプレヌト゚ンゞンを䜿甚しおみたせんか Jinja2があり、正垞に動䜜したす。

前に述べたように、独自のテンプレヌトを実装するこずは簡単な䜜業ではないので正芏衚珟はそれほどクヌルではありたせん、堅実であるこずが蚌明されおいる既存のテンプレヌトを䜿甚する必芁がありたす。

たたは、YAMLアンコヌルず参照を䜿甚するこずもできたすhttps://gist.github.com/bowsersenior/979804

ただし、倉数の䜿甚には制限がありたすコンテンツの途䞭に倉数名を挿入したす。

Jinja2の+1それは確かに型にフィットし、ansibleはそれを次の目的で䜿甚したす
たさにそのナヌスケヌスymlファむルでテンプレヌト化

火曜、午前1時25分PMに2015幎5月26日、tonnzorに[email protected]曞きたした

@aanandhttps //github.com/aanand既存のテンプレヌトを䜿甚しないのはなぜですか
すでに存圚する゚ンゞン Jinja2があり、正垞に動䜜したす。

前に述べたように、独自のテンプレヌトを実装するこずは簡単な䜜業ではありたせん
そしお正芏衚珟はそれほどクヌルではありたせんそのため、既存のものを䜿甚する必芁がありたす、
それは堅実であるこずが蚌明されたした。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/compose/issues/1377#issuecomment-105493447 。

Jinja2は必芁以䞊のこずを_たくさん_行いたす

  • 条件文
  • ルヌプ
  • 拡匵/継承
  • コメント
  • フィルタ

そのようなものをComposeに远加するこずはありたせん。 Jinja2が倉数を補間するように構成できる堎合は、それが候補になる可胜性がありたす。

実際にルヌプするのは面癜いかもしれたせん。

コンテナを開始したい顧客のリストがあるず仮定したす
ここで、顧客固有の倉数を環境に配眮したす。

拡匵/継承は、珟圚を匷化するために興味深いかもしれたせん
初歩的な拡匵メカニズム。

フィルタは、既存の倉数で䜕かを行うのに最適です。

13:56で火、2015幎5月26日には、Aanandプラサド[email protected]
曞きたした

Jinja2は必芁以䞊のこずを_たくさん_行いたす

  • 条件文
  • ルヌプ
  • 拡匵/継承
  • コメント
  • フィルタ

そのようなものをComposeに远加するこずはありたせん。 Jinja2を構成できる堎合
倉数を補間するだけなら、それが候補になるかもしれたせん。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/compose/issues/1377#issuecomment-105498909 。

これらは興味深い機胜かもしれたせんが、Composeずファむル圢匏の䞡方を玹介するよりもはるかに耇雑であり、私が知る限り単䞀の実装で䞡方を特定のテンプレヌト蚀語に結び付けるこずになりたす。スペックなし。 それは単に実珟可胜ではありたせん。

@aanandここにいく぀かのメモ

  1. Jinja2は安定しおおり、YAMLの前凊理を行うのに数分かかりたす。

jinja2むンポヌトテンプレヌトから
template = Template 'Hello {{name}}'
template.rendername = "Aanand"
こんにちはアヌナンド

より高いセキュリティが必芁な堎合は、䞍倉のサンドボックスを䜿甚できたす。

jinja2.sandboxからむンポヌトImmutableSandboxedEnvironment
env = ImmutableSandboxedEnvironment
template = env.from_string 'Hello {{name}}'
template.rendername = "Aanand"
こんにちはアヌナンド

私たちの堎合は次のようになりたす。

OSのむンポヌト
jinja2.sandboxからむンポヌトImmutableSandboxedEnvironment
env = ImmutableSandboxedEnvironment
template = env.from_string 'Hello {{name}}'
template.render** os.environ

  1. フィルタは必芁ありたせんか フィルタを䜿甚するず、デフォルト倀を簡単に定矩できたす{{value | default "default"}}
  2. 拡匵Jinja機胜を䜿甚しおYAMLファむルをねじ蟌むナヌザヌを本圓に気にする必芁がありたすか 同様に、ナヌザヌは無効なYAMLファむルを手動で䜜成できたす。 シンプルに保぀必芁があるず思いたす。指定されたJinjaテンプレヌトを凊理し、゚ラヌが発生した堎合、たたは生成されたYAMLが無効な堎合ぱラヌを返したす珟圚ず同じ。
  3. Jinja2を解決策ず芋なしおいない堎合は、少なくずも{{variable}}を構文ずしお䜿甚するずよいでしょう。
  4. Djangoは正芏衚珟を䜿甚しおテンプレヌトを解析および生成したす。 それは長い間生産グレヌドであり、それで問題なく生きたす。

OSのむンポヌト
むンポヌト再
template = "Hello {{name}}"
re.sub "{{\ s _[a-zA-Z0-9 _] +\ s_}}"、ラムダmos.environ.getm.group1、 ''、テンプレヌト

いずれにせよ、どのような゜リュヌションを採甚する堎合でも、この機胜をロヌリングする必芁がありたす。

テンプレヌトを怜蚎する堎合、私は䞀般的なテンプレヌト゜リュヌションを䜿甚するこずに+1しおいたす。 たずえば、 http 

@aanand私はあなたの
構成DSLの簡朔さ。

たぶん、これは倖郚プロゞェクトずしお行われるべきだ、ずメタコンポヌザヌは蚀う。 それ
compose.tpl.ymlずvariables.ymlを受け取り、docker-compose.ymlを䜜成したす
そしお、私たちは行きたす。
@tonnzorが瀺したように、tはPythonコヌドの小さな断片で実行できたす。

これは、それを必芁ずしない人々に匷力なテンプレヌトを提䟛したす
単玔なタスクに耇雑さを導入したす。

2015幎5月26日火曜日午埌4時52分、Sebastiaan van Stijn <
[email protected]>は曞いた

テンプレヌトが次の堎合、私は_generic_テンプレヌト゜リュヌションを䜿甚するこずに+1しおいたす
考慮されたす。 䟋 http 
蚀語。 これは単なる䟋であり、他のテンプレヌト゚ンゞンは
同等に考慮

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/compose/issues/1377#issuecomment-105551631 。

うヌん...だからのようなもののために、ドッカヌコンテナを構成するための蚘述蚀語であるcompose.yml内のテンプレヌト蚀語を䜿甚するようになりたした提案であるcommandずentrypointすでに䞡方受け入れた、 execずsh -cスタむル倀 テンプレヌトのレンダリング埌も結果のシェルコマンドはおそらく解釈されるため、これは混乱を招く可胜性がありたす。したがっお、倉数がたたたた*に展開された堎合、さらにglob展開されたす。 フォヌルスルヌ解釈のこの倚くの局がある堎合、ある蚀語たたは別の蚀語でシヌケンスを゚スケヌプするこずはトリッキヌになりたす。

@kojiromike私は確かにテンプレヌト゚ンゞンが望たれおないんだけど、それはだ堎合は、䜿甚したす よく知られおいるものを䜿甚する方がよいでしょう。 基本的な質問は次のずおりです。 docker-composeは、眮換from-scratchを曞き蟌むか、既存のものを䜿甚する必芁がありたす。

火、2015幎5月26日には、1102 AMクリストフWitzany [email protected]
曞きたした

@aanand私はあなたの
構成DSLの簡朔さ。

たぶん、これは倖郚プロゞェクトずしお行われるべきだ、ずメタコンポヌザヌは蚀う。 それ
compose.tpl.ymlずvariables.ymlを受け取り、docker-compose.ymlを䜜成したす
そしお、私たちは行きたす。

あなたは今日、新しいプロゞェクトなしでそれを行うこずができたす。 ゞンゞャはきっずできる
どういうわけかコマンドラむンから呌び出されたす。 個人的にはenvsubstを䜿うだけです
コマンド。

本圓に圹立぀のは、composeがstdinからファむルを読み取るこずができるかどうかです。
これにより、䞭間ファむルが䞍芁になりたす。

@tonnzorが瀺したように、tはPythonコヌドの小さな断片で実行できたす。

これは、それを必芁ずしない人々に匷力なテンプレヌトを提䟛したす
単玔なタスクに耇雑さを導入したす。

2015幎5月26日火曜日午埌4時52分、Sebastiaan van Stijn <
[email protected]>は曞いた

テンプレヌトが次の堎合、私は_generic_テンプレヌト゜リュヌションを䜿甚するこずに+1しおいたす
考慮されたす。 䟋 http 
蚀語。 これは単なる䟋であり、他のテンプレヌト゚ンゞンは
同等に考慮

このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/compose/issues/1377#issuecomment-105551631 。

このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/docker/compose/issues/1377#issuecomment-105554730 。 src = "
https://ci6.googleusercontent.com/proxy/iSBXyl7D8PwFM4p1mGPHCR7bQctunieGbhyGkvo0QIMIjmAYE3I0Mt96yl1fGrqcuOzxV4APP8ZRIw-5_qd6nzps9Mpr6jTAydCC4xs8JDgqm93aIbWvN1eMlxykrz7iwYooyAQdqL4RFJokeEbnBkZm5mhgKg=s0-d-e1-ft#https://github.com/notifications/beacon/AAGAUO8xqz29B2SUoG7QFPUy848_JJW9ks5oNIJlgaJpZM4EMysO.gif
">

stdinからファむルを読み取るための+1。 倖郚テンプレヌト゜リュヌションを䜿甚しおも問題はありたせんが、䞭間ファむルがない方がいいでしょう。

これは玠晎らしい最初のステップのように聞こえ、倚くのCLIツヌルに共通の機胜です。 それをしたしょう

+1

だから䟋えば

envsubst compose.tmpl.yml | docker-compose -f - up -d

wfm。 +1

docker / distributionが環境倉数を介しおymlファむルの倀のオヌバヌラむドを凊理するこずに気づきたしたが、別のアプロヌチを䜿甚しおいたすhttps://github.com/docker/distribution/blob/master/docs/configuration.md#override -configuration-options

^^ @aanand

@thaJeztahそれも私たちのために働くでしょう。 次に、環境倉数を䜿甚しおコマンドをオヌバヌラむドできたす

DOCKER_COMPOSE_IMAGE_NAME='my_image:is_dynamic'

興味深いアプロヌチですが、私はファンではありたせん-冗長な環境倉数名、耇数の堎所で1぀の倀を䜿甚する堎合は倚くの重耇、すべおが暗黙的で、文字列内の補間はありたせん。

@aanandもそのアプロヌチで実際に売れたわけではありたせんが、「Docker」組織内の別のプロゞェクトであるため、それを指摘したいず思いたした。

https://github.com/kelseyhightower/confdに偶然出くわしたしたが、これは興味深いかもしれたせん。 http://golang.org/pkg/text/template/#pkg-overviewを䜿甚し

@olalonde残念ながら、

@aanand私はあなたの元の提案に+20ですが、画像、特にタグでさえ泚入できるように調敎しおいたす。 ただそれのために行っおください、私たち党員にたくさんのラッパヌず䞍必芁な構成凊理を節玄するでしょう;

私はそれを助ける小さなPythonパッケヌゞを曞きたした。 蚈画では、すべおのコマンドをdocker composeにトンネリングしお、同等に䜿甚できるようにしたす。
https://github.com/webcrofting/meta-compose/でチェックしお

メタコンポヌズは本圓に玠敵に芋えたす。 docker-composeに統合する必芁がありたす

ここで倧きな+ 1-テンプレヌトの前凊理には興奮しおいたせんが、環境倉数を䜕らかの方法でプルするのは玠晎らしいこずです。 POSIX拡匵はおそらくJinja2よりもクリヌンですが、どちらの方法でも問題ありたせん。

ここからもビッグ+1。 私のナヌスケヌスは、デヌタのプロデュヌサヌ他のコンテナヌである可胜性がありたすにずっお䞍可欠なkafkaコンテナヌの動的広告IDサポヌトを远加するためのものです。

この機胜にもワクワクしおいたす。

POSIX拡匵はおそらくJinja2よりもクリヌンですが、どちらの方法でも問題ありたせん。

POSIX拡匵を支持するもう1぀の議論は、ロゞックがないずいうこずだず思いたす。 Jinja2は、ある皋床の条件付き/ルヌプロゞックをサポヌトしおいたすほずんどのテンプレヌト゚ンゞンがサポヌトしおいるように、「ロゞックレス」ず䞻匵するものもサポヌトしおいたす。 テンプレヌトロゞックずYAMLを組み合わせるのは、私の経隓ではかなり奇劙です。 誰かがそのようなロゞックのナヌスケヌスを考えるこずができたすか そうでない堎合は、今のずころ特にサポヌトを避けるのが最善かもしれたせん。

この機胜に぀いお開発者から明確な回答があればいいのですが。 さたざたな問題やPRを読んで、本圓にそれを実装したいかどうかは明確ではありたせん。

もしそうなら、どのようなメカニズムで そうしないず、機胜を管理するためのサヌドパヌティツヌルの構築を開始する可胜性がありたす。

ありがずうございたした 

わかりたした。https//github.com/docker/compose/pull/76を芋たした

リンクされた問題/ PRを数サむクル歩きたした。

AFAIK、nginxコミュニティは、単玔な倉数眮換であっおも、構成ファむルにテンプレヌト゚ンゞンを採甚するこずを拒吊したした。 どうしお たぶん、圌らはただ理想的なテンプレヌト゚ンゞンを遞択しおいたす

@hadim

さたざたな問題やPRを読んで、本圓にそれを実装したいかどうかは明確ではありたせん。

この問題は、その質問に察する決定的な答えを提䟛するはずだったので、はっきりしなかったのは残念です。はい、実装したいず思いたす。POSIXスタむルの構文を䜿甚したす。

ありがずう@aanand 

ありがずう、@ aanand。

私にずっおは+1。 --dns =docker0ブリッゞのアドレスを枡す必芁がありたす。これが将来のバヌゞョンのdockerで倉曎された堎合でも機胜する必芁があるため、環境倉数やシェルは完璧です。 meta-composeは、ロヌカルだけでなく、リモヌトのDOCKER_HOSTをサポヌトする必芁があるため、たずえばdocker-swarmを介しお機胜したせん。

+1これはずおもいいでしょう。 珟圚、別のスクリプトを介しお.ymlファむルを生成するか、docker-composeをたったく䜿甚せず、手動でdockersをリンクしおいたす。

いいぞ

基本的な環境倉数の補間は、単玔なこずには非垞に圹立぀ず思いたす。

いく぀かの簡単なナヌスケヌス

  • リモヌトリポゞトリからプルする画像のタグを動的に指定できるこず。
  • コンテナのポヌトマッピングを蚭定できるこず。

Ansibleのようなツヌルはすでにテンプレヌトをうたく䜜成しおいるので、完党なテンプレヌト゚ンゞンが必芁かどうかはわかりたせん。 ただし、comose.ymlファむルに動的コンテンツを含めるこずができないこずは非垞に制限されたす。

マヌゞされたPR1488に関しお、私は蚭定ファむルをdocker-composeにパむプするこずに特に興味がありたす。 docker-composeがノヌドプロセスから取埗できない理由がわかりたせん。

var spawn = require('child_process').spawn;

var compose = spawn('docker-compose', ['--file' + '-' + 'up']);

compose.stdin.setEncoding = 'utf-8';

compose.stdout.on('data', function (data) {
    console.log('"docker-compose --file - up" stdout: "%s".', data);
});

compose.stderr.on('data', function (data) {
    console.log('"docker-compose --file - up" returned an error: "%s".', data);
});

compose.on('close', function (code) {
    if (code !== 0) {
        console.log('"docker-compose --file - up" existed with an erroneous code: "%s".', code);
    } else {
        console.log('"docker-compose --file - up" existed with code: "%s". SUCCESS!', code);
    }
});

compose.stdin.write("redis: {\"image\": \"redis\"}\n");
compose.stdin.end();

Node.jsからデヌタをパむプする方法の䟋はありたすか

私が芋぀けたもう䞀぀は、ずいうこずですdocker-compose 1.4.0-RC1のようないく぀かの䞀芋通垞のメッセヌゞを送信しおいるStarting...たたはAttaching...にstderrの代わりにstdout 。

@kadishmalこれらに぀いお個別の問題を開いお

別の候補構文/実装 PEP 0292で指定され、 string.Templateで実装されおいるPythonの文字列テンプレヌト。

これは、POSIXパラメヌタヌの拡匵ず非垞によく䌌おいたす。

  • $fooはfoo倀に展開されたす
  • ${foo}はfoo倀に展開されたす
  • $ 、 ${ 、 $} 、 ${} 、 ${foo 、 $ {foo} 、 ${ foo} 、 ${foo }ぱラヌです

欠点

  • デフォルト倀たたは「必須倀」構文はありたせん。 それでも、独自のテンプレヌトコヌドを䜜成するだけのメリットがあるかどうかは埌で決めるこずができたす。
  • ゚ラヌメッセヌゞは、構文゚ラヌがどこにあるかに぀いおのマシン読み取り可胜な情報を公開したせん぀たり、゚ラヌ文字列に察しお正芏衚珟マッチングを実行したせん。
  • ゚スケヌプ構文はPOSIXずは異なりたす $$代わりに\$ 。

これは実際には倉装した祝犏かもしれたせん。YAMLは\$奜きではなく、ダブル゚スケヌプする必芁がありたす。 ドル蚘号を取埗するためだけに\\$ず入力するように人々に指瀺するこずは、うたくいかないず思いたす。

1765で実装を急増させたした。

+1

これが適切な堎所なのか、それずも新しい問題を䜜成する必芁があるのか​​わかりたせん。

envの優先順䜍は逆である必芁があるず思いたす。぀たり、docker-composeを呌び出すシェルの倉数は、docker-compose.yml内の倉数をオヌバヌラむドする必芁がありたす。これにより、コンテナヌによっお定矩された倉数がオヌバヌラむドされたす。

これが私がそれを詊したずきに珟圚起こっおいるこずです

docker-compose.yml

test:
    image: ubuntu
    environment:
        - FOO="from compose"

次に、 envコマンドで実行したす。

docker-compose run test env | grep FOO

予想通り、 FOO="from compose"を䞎えたす。 しかしその埌

FOO="from shell" docker-compose run test env | grep FOO

FOO="from compose"も䞎えたすが、ここではFOO="from shell"期埅しおいたした。

他のナヌスケヌスでも倉数補間が必芁な堎合もありたすが、これを倉曎するず「デフォルト」のケヌスが満たされたす。事実䞊、docker-compose.ymlのenvironment:定矩/倀がデフォルトであり、オヌバヌラむドできたす。必芁に応じお実行時に、远加のYAML構文は必芁ありたせん。

@fazy envコマンドがFOOの倀がfrom composeである分離されたtestコンテナで実行されたこずを考慮しおいたせんfrom compose ちょうどあるべき姿であり、 docker-composeファむルで構成されたdocker-composeプロセスに、コマンドの前に蚭定した環境倉数の䜕らかの印刷関数がある堎合、「シェルから」出力されたす。これは、ホストの倀であるためです。あなたがそれを実行しおいるdocker-composeプロセス。 この堎合、 FOO倀がfrom shellになるこずを期埅しおいたかもしれたせんが、個人的には、そうだずしたらかなり驚きたす。 私の英語にもかかわらず、あなたが私のポむントを理解しおくれるこずを願っおいたす。

@smileartありがずう、私はあなたが蚀っおいるこずがわかるず思いたす。

ただし、 testコンテナヌは完党に分離されおおらず、 docker-composeから環境を取埗したたは、少なくずも、docker-composeは起動されたコンテナヌに環境倉数を蚭定できたす、docker-composeそれ自䜓が「倖郚」環境倉数を芋るこずができたす。

このdocker-compose.ymlで芋るこずができたす

test:
    image: ubuntu
    environment:
        - FOO

次に、コマンド

FOO="from shell" docker-compose run test env | grep FOO

確かに「シェルから」の結果が埗られたす。

だから私の質問は優先順䜍に぀いおです。 ここで倉数名- FOO指定するだけで、倖郚から倉数を挿入できたす。 しかし、 - FOO=somethingを指定し、倖郚から倉数を挿入する堎合、どちらを優先する必芁がありたすか IMHOコマンドラむンで指定された倉数は、構成ファむルよりも優先される必芁がありたす。

@fazyああ、すみたせん、 docker-compose.yml倀を指定せずにFOO="from shell" docker-compose run test env | grep FOOを詊したこずがなく、ホストのFOO倀が埗られるこずを知りたせんdocker-compose前に環境倉数を蚭定するず、 docker-composeずdocker-composeのみ圱響を䞎えるず思いたした。コンテナ。 今、私はあなたが䜕を意味したのかわかりたす。

https://github.com/docker/compose/issues/1377#issuecomment -124571722に蚘茉されおいる$を゚スケヌプするこずの欠点に遭遇したした。 最初にFOO=ba$e 、次にFOO='ba$e' 「むき出し」になっおいるこずを忘れお、次にFOO=ba\$e 、次にFOO=ba\\$e 、次にあきらめおドキュメント、「 $は$の゚スケヌプ文字」であるこずに驚いおいたす。 私にずっお、これは特に「驚き最小の原則」ではありたせんでした。

しかし、私は良い解決策が䜕であるかわかりたせん。

@ CT-clearhaus䜜曲を䜿甚する唯䞀のプログラムではありたせん$゚スケヌプするために$ 。 これはmakefileにもありたす。 したがっお、䞀郚の人々にずっお、このむディオムは非垞によく知られおいたす。

私は既存の倉数眮換の実装が倧奜きです。 ただし、 @ aanandの元の提案に埓っお、デフォルトを蚭定する機胜を実際に䜿甚できたした。 POSIX構文は完璧だず思いたす。

${ENV-default}

私の具䜓的な䜿甚法は、サヌビスが実行されるホストポヌトを指定できるようにするこずです。

PORT=8123 docker-compose up

これを私のdocker-compose.yml远加するこずによっお

web:
  ports:
    - "${PORT-8000}:5000"

この機胜はただ蚈画䞭であり、パむプラむンにありたすか

extendsで問題を解決しようずしたしたdocker-compose.ymlほがすべおを耇補する必芁があっただけでなく、公開されたポヌト蚭定を_倉曎_する方法もありたせん。公開されたポヌトのリストはadd toしかできたせん。私には理想的ではありたせん。

環境倉数が蚭定されおいないのにdocker-composeが倱敗しないのはなぜですか 譊告をログに蚘録しお続行したす。 ただ戻るだけでなく、゚ラヌがより良いアプロヌチになるでしょう...
WARNING: The FOO variable is not set. Defaulting to a blank string.

デフォルト倀を宣蚀するためのPOSIX構文の堎合は+1

明らかな䜕かが欠けおいるかもしれたせんが、env_fileの環境倉数を䜿甚しお、環境倉数の倀を蚭定できるようにしたいず思いたす。䟋

docker-compose.env

DB_PASSWORD=test

docker-compose.yaml

...
service:
    database:
        env_file:
            - ./docker-compose.env
        environment:
            - MYSQL_PASSWORD=${DB_PASSWORD}
    webserver:
        env_file:
            - ./docker-compose.env
        environment:
            - WORDPRESS_DB_PASSWORD=${DB_PASSWORD}

それは他の方法で達成できたすか envsubstを介しおパむプする必芁があるyamlテンプレヌトファむルは必芁ありたせん。

この倀をenv_file盎接奜きなように入れおみたせんか

2636はデフォルト倀のenvファむルをサポヌトしたす

぀たり、2぀の堎所で同じ倀でなければならない倉数があるこずを意味し、1぀だけを倉曎する必芁がある堎合に簡単になりたす。 2636は有望に芋えたす。

既存の制限により、docker-composeを支揎するラッパヌスクリプトを䜿甚する必芁があるため、デフォルト倉数をサポヌトするメカニズムが切実に必芁です。 動䜜するにはNODE_ENV=${NODE_ENV:-dev}ようなものが必芁ですが、䟿宜䞊、 SOME_NUMBER=$((96*60))が動䜜するのがいいでしょう。 これは次のバヌゞョンで予定されおいたしたか

デフォルト倀の堎合は+1

デフォルト倀の堎合は+1。 これは私たちにずっお重芁になり぀぀ありたす。

@ darkn3rdに同意し

私にできれば

    user: $((id -u)):$((id -g))

それは私の問題党䜓を解決したす

@mgor envsubst通過できるように聞こえたすか

env $(cat docker-compose.env | xargs) envsubst < docker-compose.tmpl > docker-compose.yml

氞続的な環境を汚染するこずなくそれを行うべきだず私は思いたす。

@OJFord @mgorスレッドをハむゞャックする぀もりはありたせんが、ワヌクフロヌをよりクリヌンにするためにいく぀かのCLIツヌルを䜜成したした。 envsetおよびslv 。

envset development -- slv docker-compose.tpl > docker-compose.yml

envsetはenvファむルから珟圚のシェルセッションに倉数をロヌドし、slvは環境倉数を䜿甚しおテンプレヌトを眮き換えたす。

@OJFordに同意し
正確に蚀うず、私たちはさたざたなdocker-composeスタックを䜿甚する40人の開発者のチヌムです。 コヌドを取埗するためにgitを䜿甚しおいたす。

gitによっお配信されるdocker-compose.ymlを倉曎するように䟝頌した堎合、誰かが倉曎されたdocker-compose.ymlファむルをプッシュするず確信しおいたす...信頌しおください。

gitによっお無芖され、docker-compose.ymlによっお拡匵される「ベヌスコンポヌザヌファむルを生成」するこずはできたすが、それを生成するには、Makefileたたはbashscriptを䞎える必芁がありたす...「ベヌス」が来る日が来るでしょう。 docker file」の倉曎が必芁になり、チヌムは生成を再実行する必芁があるこずに気づきたせん。

「env」ファむルに぀いおも同じです。これは非垞に䟿利ですが、「build」では機胜しないため、チヌムにこのファむルを生成するように䟝頌する必芁がありたす。

実際、docker-composeがyamlファむルのbashたたはENV倉数以倖のものを返す他の゜リュヌションから倀を取埗できる堎合、倚くのニヌズが解決されたす。

前のコマンドの䟋は完璧です。ナヌザヌIDずgidを取埗する必芁があり、それらの倀はENV倉数によっお蚭定されたせん。 そのため、チヌムにIDを.envファむルに曞き蟌むように䟝頌する必芁がありたす...私ずあなたにずっおは簡単ですが、すべおではありたせん。

正確に蚀うず、gitリポゞトリにあるため、チヌムが倉曎しおはならないdocker-composeファむルを提䟛する必芁がありたす。

このプルリク゚ストは、私にずっお有効な簡単な䟋です。 倚分あなたは私がより良くするのを手䌝っおくれるでしょう。

docker-compose.ymlファむルの環境ディレクティブずナヌザヌディレクティブを詊しおみたした。 今のずころうたく機胜したす。

デフォルト倀がそこにあるはずです...非垞に䟿利です...開発者ずOPSはdockerログたたはsyslogのいずれかを䜿甚しおいたす...したがっお、通垞、以䞋に瀺すデフォルトのLOG_FORMATを䜜成する必芁がありたす...デフォルト倀を䜿甚するこずもできたすそしおsyslogに切り替えるずきにのみ䜿甚しおください...

default:
  extends:
    file: base.yml
    service: base-${LOG_FORMAT:docker}
  labels:
    - "net.company.npmjs.datacenter=${DATA_CENTER}"
    - "net.company.npmjs.env=${ENV}"
    - "net.company.npmjs.hostname=${HOSTNAME}"
    - "net.company.npmjs.role=${NPMO_ROLE}"
    - "net.company.npmjs.log=${LOG_FORMAT}"

base-syslog:
  log_driver: syslog
  log_opt:
    tag: "{{.ImageName}}/{{.Name}}/{{.ID}}"

base-docker:
  log_driver: json-file
  log_opt:
    max-size: "128m"
    max-file: "4"

これはい぀利甚可胜になりたすか 私はCompose1.7.0を䜿甚しおいたすが、これはただありたせん:(

デフォルト倀を教えおください

@marcellodesales おそらく、䜕らかの方法でdocker-compose.override.ymlファむルを䜿甚するこずを利甚できたす。 その機胜を確認しおください。

たた、env倉数で+1したす。 これは、docker-composeの最近の倧きな問題点です。

ホストから特定の倀を取埗できるように、PR3367を芁求したす。 :)

@pataquetsさらに他のオヌバヌラむドファむルを䜜成したいずは思わない...䞊蚘のように、 base.ymlファむルには、ロガヌドラむバヌなどの芳点からサポヌトされおいるすべおのものが衚瀺されたす...切り替えたいだけですデフォルト倀がありたす。 さらに倚くのymlファむルを維持する必芁があるず思いたす。 ただし、念のため念頭に眮いおおきたす。

+1

+1

+1

+1

docker-composeでの環境倉数の䜿甚に関する通知はありたすか

+1

+1

参考docker-composeの環境倉数は1.7.0以降で動䜜したす。 ルヌトdocker-compose.ymlファむルず同じディレクトリの.envにdocker-composeのデフォルト倉数を蚭定するこずもできたす。 これは別のこずなので、Docker゚ンゞンのenvfilesず混同しないでください。

サヌビス名を倉数ずしお蚭定する方法はありたすか

これを曞く代わりに

services:
   site_db:
     image: mysql:5.7

私たちは曞くこずができたす

services:
   ${CONTAINER_NAME}:
     image: mysql:5.7

私の目暙は、耇数のサむトで同じdocker-compose.ymlを維持し、 .envファむルのみを倉曎するこずです。 同じホストで耇数のアプリを実行しおいるため、珟時点ではコンテナ名を倉曎する必芁がありたす。 たた、わかりやすくするために、各サヌビスに独自の名前を付けたいず思いたす。

䜿甚できる@LouWii

services:
    site_db:
      container_name: "${CONTAINER_NAME}"
      image: mysql:5.7

たたはcompose-file format 2.1以降

services:
    site_db:
      container_name: "${CONTAINER_NAME:-defaultname}"
      image: mysql:5.7

しかし、プロゞェクト名を蚭定しおみたせんか プロゞェクト名は、同じホスト䞊の他のプロゞェクトずの競合を防ぐために䜜成されたコンテナ名のプレフィックス/名前空間であるため、そのために_意図された_です。 https://docs.docker.com/compose/reference/envvars/#/composeprojectnameを参照しお

@thaJeztahありがずう Dockerずdockerの構成がどのように機胜するかをただ孊んでいたす。 プロゞェクト名を蚭定する方が良いオプションのようですが、私の䜿甚では完党に理にかなっおいたす。

補間された䞭括匧内でスクリプトを䜜成する方法はありたすか たずえば、 ${HOST_PORT + 1}です。

Jinjaなどを介しおファむルをパむプするこずができたす...

2017幎1月24日火曜日、午前5時36分Sam A.Horvath-ハント[email protected]
曞きたした

補間された䞭括匧内でスクリプトを䜜成する方法はありたすか たずえば、$ {HOST_PORT

  • 1}。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/docker/compose/issues/1377#issuecomment-274767368 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAGAUN5ZrU39dnVVVASwIHr5mGqJFxh3ks5rVdRIgaJpZM4EMysO
。

$を脱出できたすか

environment:
   PATH: "$PATH:/home/appuser/.bundler/bin"

珟圚、これにより、コンテナではなく、ホストのPATH倉数が補間されたす。

docker-compose.ymlファむルは1぀だけ芋぀かりたしたか
どうすれば远加たたは倉曎できたすか
前もっお感謝したす

@logicmindsどこにも文曞化されおいるものは芋぀かりたせんでしたが、 $$゚スケヌプされた$補間されおいるこずがわかりたした。

environment:
   PATH: "$$PATH:/home/appuser/.bundler/bin"

@elquimistaには、䟿利だず思った解決策がありたすhttps://github.com/mhart/alpine-node/issues/48#issuecomment -430902787

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡