GitLab RunnerのパイプラインでDocker daemonに接続できない件

こんにちは。KOUKIです。

個人的に、GitLabを使ってパイプライン構築にチャレンジしています。

そこで、以下のエラーが発生して困った!という話をします。

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

何が起こったか

「.gitlab-ci.yml」にDocker in Dockerの構成(docker:19.03.5-dind)で、パイプラインを構築しました。

GitLab Runnerは、Mac上で構築しています。

そして、GitLabへコードをPushしMergeしたところ、下記のコマンドでエラーが出ました。

docker-compose run –rm app sh -c “python manage.py wait_for_db && python manage.py test && flake8”

Gitlab Couldn’t connect to Docker daemon at http://docker:2375 – is it running?

Dockerコンテナ内からDocker daemonを検出できないようです。。

原因と解決方法

このサイトに全てが載っていました。

Docker In Dockerで使っている「docker:19.03.5-dind」イメージでは、自動的にTLS証明書を作成するようです。

これをうまい具合に処理すると、回避できます。

以下、私が解決した方法を記述します。

1. GitLab Runnerの設定ファイルを変更

もう一度言いますが、私の環境ではGitLab RunnerはMac上で動いています。ちなみにexecuorはdockerです。

そして、設定ファイルは「~/.gitlab-runner/config.toml」になります。
※Homebrewでインストールしました

この設定ファイルのrunners.dockerエリア内にあるprivilegedとvolumesの設定を書き換えます。

2. .gitlab-ci.ymlの設定を変更

次に、「.gitlab-ci.yml」にvariablesの設定を追加します。

3. gitlab runner serviceの再起動

設定を反映させるために、gitlab runnerのサービスを再起動します。

私の環境の場合は、これで動きました!

おわりに

パイプライン構築は意外に面白いので、皆さんも機会があればぜひチャレンジしてください^^

それでは、また!

コメントを残す