teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

depends_onが指定されていない場合の挙動を修正

2020/06/18 04:40

投稿

hope_mucci
hope_mucci

スコア4447

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  `depends_on`はコンテナの作成順序を決めるだけのもので質問者さんが想像するようなコンテナ間の依存関係を定義するものではありません。
2
- `depends_on`が指定されていない場合、コンテナは記載された上から順番に作成されます。
2
+ `depends_on`が指定されていない場合、コンテナは~~記載された上から順番に作成されます。~~同時に作成されます。
3
3
 
4
4
  また、冒頭に説明したようにコンテナの作成順を決めるだけなので、コンテナ中のプログラムやサービスの起動完了を待つわけではありません。ここに最も注意が必要です。
5
5
 
@@ -9,4 +9,10 @@
9
9
 
10
10
  ### 追記
11
11
  `docker-compose up`だけで運用するなら全然問題ないのですが、`docker-compose up [service-name]`のように引数にサービス名をつけてupするような場合、起動サービスの`depends_on`で記載されたサービスが先にビルドされます。無関係のサービスはビルドされません。このような場合では依存関係の記載が有効でしょう。
12
- でもサービス名つけてupするような用事はほとんどないような・・・
12
+ でもサービス名つけてupするような用事はほとんどないような・・・
13
+
14
+ ### 追記2
15
+ 本文も修正しましたが、`depends_on`が指定されていない場合、それぞれのコンテナは同時に作成が開始されます。
16
+ コンテナ作成開始時に、docker内部DNSにサービス名でアドレスが引けるよう登録されるようです。
17
+ bsdfanさんのコメント通り、nginx起動時にconfファイルを読み込み転送先ホストの名前解決を行うようです(相手ホストとの通信は発生せず、名前解決のみ?)それまでにDNSに相手ホスト情報が登録されていなければエラーとなりますが、コンテナが同時に起動されていれば十分間に合うようです。
18
+ 意図的に逆向きに`depends_on`を記載していない限りは実質大丈夫だと思われます。

1

docker-compose up [service] の場合を追記

2020/06/18 04:40

投稿

hope_mucci
hope_mucci

スコア4447

answer CHANGED
@@ -5,4 +5,8 @@
5
5
 
6
6
  本件で`web`が`app`に対して依存する要素はpho-fpm用のドメインソケットが作成されるディレクトリの共有部分`- php-fpm-socket:/var/run/php-fpm`のみで、`app`側が先にマウントしないといけませんが、これはコンテナ作成時にボリュームの共有化が完了するためコンテナ作成後の中身の処理が速かろうが遅延していようが関係ないので大丈夫になっています。
7
7
 
8
- 要するに、本件に限って言えば接続や中身のサービスをコントロールする必要が(たまたま)なかっただけです。
8
+ 要するに、本件に限って言えば接続や中身のサービスをコントロールする必要が(たまたま)なかっただけです。
9
+
10
+ ### 追記
11
+ `docker-compose up`だけで運用するなら全然問題ないのですが、`docker-compose up [service-name]`のように引数にサービス名をつけてupするような場合、起動サービスの`depends_on`で記載されたサービスが先にビルドされます。無関係のサービスはビルドされません。このような場合では依存関係の記載が有効でしょう。
12
+ でもサービス名つけてupするような用事はほとんどないような・・・