2017-03-30 13 views
0

これはdocker-compose.ymlファイルの構文に関する質問です。私は、インターネット上でこのような変数への代入を満たし:一方Dockerでの環境変数の割り当てCompose - コロンの方法

environment: 
    PMA_HOST: mysql 

http://tech.osteel.me/posts/2017/01/15/how-to-use-docker-for-local-web-development-an-update.html


をドキュメントは、次のように伝えます:

environment: 
    - DEBUG=1 

https://docs.docker.com/compose/environment-variables/

ですダッシュがなく、結腸が適切な方法ですか?違いはなんですか?

+0

意見はありますか? –

+0

私はそのチュートリアルのコードを使用して、他の画像や他の環境変数にいくつかの変更を加えるつもりです。これを行う方法はわかりません。あるいは、私はこれらの課題をよりよく理解する必要があります。質問は「これは正当なものです」 – trzczy

+0

私は仕事とそれが意見の問題であると信じていると言っています。好奇心にはあまり間違いがない。両方を試してみて、どの作品が好きなのかを見てみましょう。 :-) –

答えて

2

ドキュメント自体はboth methods are working言う:

あなたは配列や辞書のいずれかを使用することができます。

今度は、適切な用語を使用することができないためにドッカーを許しましょう(配列が実際にYAMLでシーケンスで、辞書はマッピングである)とYAMLの観点から見て:

マッピングはYAML構文の一部であるため、YAMLパーサによって解析されます。これにより、構文認識エディタが適切な強調表示などを行うことができます。ドキュメントのように、truefalseのような値はYAMLによってブール値に変換されるので、それに注意する必要があります。ドキュメントからの例:

environment: 
    RACK_ENV: development 
    SHOW: 'true' 
    SESSION_SECRET: 

我々は'true'を引用しないだろう、それは我々が望むものではないブール値として解析されます。

一方、シーケンスを使用すると、YAML構文のスペースが残ります。シーケンス自体はYAMLですが、値はちょうど1つのスカラーとして解析されます。例えば、ここではシーケンスの最初のスカラー値:

environment: 
    - RACK_ENV=development 
    - SHOW=true 
    - SESSION_SECRET 

RACK_ENV=developmentとしてYAMLによって解析されます。 Dockerは変数名と値を分離するために後処理を行います。したがって、この方法を使用すると、2つの構文解析ステップを使用しているため、構文認識エディタで適切に強調表示することが難しくなります。また、=とどこの:を使用するかについての決定をユーザーに課しますが、これはYAMLをよく知らない人にとってはすぐにはわかりません。それは人々を混乱させる可能性があります。

エスケープすると、trueを引用符で囲む必要はありません。これはYAMLスカラーの中間にあるため、スタンドアロン値として解析されないためです。実際には、YAMLが引用を内容として扱うようにすることを言います。

にはの引用符が必要な場合(たとえば、エスケープシーケンスを使用する場合など)、スカラー全体を引用する必要があります。あなたの価値の内側タブ文字を持つようにしたい場合たとえば、それは次のようになります:

environment: 
    - "MY_VAR=some\tvalue" 

あなただけ=後に一部を引用する場合には動作しません。繰り返しますが、これは混乱するかもしれません。

結論:私にとっては、マッピングを使用すると一貫性があり、ユーザーの混乱を招くことが少なくなるため、望ましいと思われます。 ymmv。

関連する問題