こんにちは。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)で、パイプラインを構築しました。
1 2 3 4 5 6 7 8 9 |
Build: image: docker:19.03.5 services: - docker:19.03.5-dind stage: Test and Lint script: - apk add --update docker-compose - docker-compose run --rm app sh -c "python manage.py wait_for_db && python manage.py test && flake8" |
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の設定を書き換えます。
1 2 3 4 5 6 7 8 9 10 11 12 |
[[runners]] name = "Hoger" url = "http://gitlab.com" token = "" executor = "docker" [runners.custom_build_dir] [runners.docker] # privileged = false privileged = true volumes = ["/certs/client", "/cache"] # volumes = ["/cache"] shm_size = 0 |
2. .gitlab-ci.ymlの設定を変更
次に、「.gitlab-ci.yml」にvariablesの設定を追加します。
1 2 3 4 5 6 7 8 |
Test and Lint: image: docker:19.03.5 variables: # 追加 DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" services: - docker:19.03.5-dind |
3. gitlab runner serviceの再起動
設定を反映させるために、gitlab runnerのサービスを再起動します。
1 |
brew services restart gitlab-runner |
私の環境の場合は、これで動きました!
おわりに
パイプライン構築は意外に面白いので、皆さんも機会があればぜひチャレンジしてください^^
それでは、また!
コメントを残す
コメントを投稿するにはログインしてください。