5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitLab CIでdocker imageをビルドする時、docker daemonが起動してくるまで待つ

Last updated at Posted at 2020-12-26

背景

GitLab CIでdocker imageをビルドするJobがコケる原因を調べていたら、どうもdocker infoをした時にコケていることが分かった。

docker info failed.png

dockerはクライアント - サーバー型のアプリケーションだが、サーバー側であるdocker daemonが起動してくる前にdocker infoコマンド打ったりすると「daemonがないんですけど…」と怒られてしまう。

Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?

docker in dockerであるdindは正しく使用しており、本当にただ起動が遅れているだけなので、sleep 10のように待つとビルドは通る。しかし謎のsleepはつけたくないので、daemonが起動してくるまで待つようにしたい。

やったこと

シェルスクリプトを書いてプロジェクトに追加した。
幸い、daemonがないとdocker infoがエラーとなることが分かっているので、それを利用する。

wait.sh
#!/bin/sh

# dindのdocker daemonが起動するまで待つスクリプト
while :
do
    if docker info > /dev/null 2>&1; then
        break
    fi
    echo 'waiting docker daemon...'
    sleep 1
done

exit 0

.gitlab-ci.ymlのdocker infoよりも前にスクリプトを仕込む。実行可能にするためにchmodも忘れない。

.gitlab-ci.yml
before_script:
  - chmod u+x wait.sh && ./wait.sh
  - docker info

結果

起動を待つようになってくれてビルドが失敗することがなくなった。

docker daemonを待つようになった

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?