Help us understand the problem. What is going on with this article?

スクリプトでCIの自動化をやろうとした時、dindコンテナ内のDockerデーモンが起動するまで待つ

More than 1 year has passed since last update.

CIに関連する作業の中でコンテナ上でコンテナ動かしたかったのでDinDを触っていた時の知見
DinDコンテナと、その上で動くコンテナはそれぞれDinDコンテナコンテナで単語を使い分けてます。

結論

DinDコンテナ内で/var/run/docker.pidを見ていれば良いらしい。
デーモンが起動した後に生成される、dockerのpidが書かれたファイル

ハマった事

スクリプト1つ実行させるだけでDinDコンテナ起動、DinDコンテナ内でコンテナ起動、色んな作業/テスト実行とかやりたかったのですがDinDコンテナ起動直後はDockerデーモンが立ち上がりきっておらず、デーモン動いてる?とエラーを吐かれます。
最初は無理やりsleep 10とかつけていたのですがこれはもちろんアンチパターンです。Go言語触ってる人からすると卒倒モノですね。
時間で待機するのはよろしくないので、何かデーモンが起動したと確実に分かる方法が欲しかったので調べていた所、ここにpidファイルを吐き出すパスを指定するオプションがあることを見つけました。pid吐き出されるならデーモンも起動しているだろって事で上記を解決出来ました。

例えばこんなスクリプト書いて

wait.sh
#!/bin/bash

while :
do
    if [ -e /var/run/docker.pid ]; then
        break
    fi
done

exit 0

こんなのも書き

start.sh
#!/bin/bash

docker run --privileged --name test -v `pwd`/wait.sh:/wait.sh -d docker:dind

docker exec test sh /wait.sh

docker exec test docker run hello-world

あとは
$ sh start.sh
を実行してみます。
start.shのdocker exec test sh /wait.shをコメントアウトしてみると分かりますが、wait.shがDinDコンテナ内で実行されたおかげでhello-worldもといHello Dockerが実行されます。

wannabe
自分自身へのメモとして使うことが多いです。 また、記事内のコードはパブリックドメインです。ご自由にお使いください。
infra-workshop
インフラ技術を勉強したい人たちのためのオンライン勉強会です
https://wp.infra-workshop.tech/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした