3
0

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.

CircleCIでDockerを使えないときの対処法(ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?)

Last updated at Posted at 2021-02-25

最近、個人開発でCircleCIを導入中です。
が、情弱すぎるが故に大苦戦を強いられています:tired_face:

CircleCIってbitriseなんかとは違ってガッツリymlを手書きするスタイルなんですね。
こっちの方が好きかもです。

で、今回そこそこ苦戦を強いられたエラーですが

ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

↑これです。
dockerを使っている人なら結構見覚えありますよね。以前にも何度も苦しめられたのですが、今回もです。

「これって、dockerグループ作って、自分をそこに追加すれば良いやつだよな。それかservice docker startでいけるやろ:tired_face:
↑安易にそう思って敵とすら認識しなかったのですが・・・

・・・全然直らない

結論

結論から言うと、CircleCIのコンテナ(コンテナへの入り方は後述)の/run/docker-temp.sockの権限が問題だったようです

sudo docker-compose up -d
でも動くと思いますが、sudoつけてdockerを動かすと何かと不具合が多発した記憶があるのでできればなしで動くようにしたい・・・

というわけで早速、CircleCIのコンテナ内の/runの配下の権限をみてみます

$ls -al /run
total 16
drwxr-xr-x 1 root        root        4096 Sep  6 08:33 .
drwxr-xr-x 1 root        root        4096 Sep  6 08:33 ..
srw-rw---- 1 root        root           0 Sep  5 02:54 docker-temp.sock
lrwxrwxrwx 1 root        root          25 Sep  6 08:33 docker.sock -> /var/run/docker-temp.sock
drwxr-x--- 2 Debian-exim Debian-exim 4096 Sep  6 00:06 exim4
drwxrwxrwt 2 root        root        4096 Aug 31 00:00 lock
-rw-rw-r-- 1 root        utmp           0 Aug 31 00:00 utmp

docker-temp.sockのグループがroot rootになっています。
これに対して

sudo chown $(whoami):$(whoami) /run/docker-temp.sock

これをやれば使えるようになりました。実際のconfig.ymlを下の方に貼っときました
(※セキュリティ的な懸念があればどなたか教えてください。)

その他の考えられる原因

config.ymlのstepsに

- setup_remote_docker

これが含まれているか確認してください(エラー文の通り、dockerが起動していない可能性)

CircleCIのコンテナへの入り方(最下部にある参考文献より引用多し)

まずは、コンテナを10分間立ち上げるためにほぼ空っぽのconfig.ymlを用意します。

config.yml
version: 2
jobs:
  build:
    working_directory: ~/app
    docker:
      - image: circleci/python:3.6
    steps:
      - setup_remote_docker
      - run:
          name: test
          command: sleep 600

(引用)

次にdocker psで

$ docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS               NAMES
e1ebbeccc823        circleci/python:3.6   "/bin/sh"           7 seconds ago       Up 5 seconds                            vigorous_brattain
16ba46868114        circleci/picard       "circleci build"    9 seconds ago       Up 7 seconds                            hardcore_murdock

一番目のコンテナに入ります

$ docker exec -it vigorous_brattain bash

そしてsocketの権限を確認します

circleci@e1ebbeccc823:/$ ls -al /run
total 16
drwxr-xr-x 1 root        root        4096 Sep  6 08:33 .
drwxr-xr-x 1 root        root        4096 Sep  6 08:33 ..
srw-rw---- 1 root        root           0 Sep  5 02:54 docker-temp.sock
lrwxrwxrwx 1 root        root          25 Sep  6 08:33 docker.sock -> /var/run/docker-temp.sock
drwxr-x--- 2 Debian-exim Debian-exim 4096 Sep  6 00:06 exim4
drwxrwxrwt 2 root        root        4096 Aug 31 00:00 lock
-rw-rw-r-- 1 root        utmp           0 Aug 31 00:00 utmp

こんな感じで、コンテナに入ってsocketの権限を確認できます。

作成したconfig.yml

実際に動作したものを切り抜いて載せます

config.yml
version: 2.1

executors:
  python_executor:
    docker:
      - image: circleci/python:3.8.2
    working_directory: ~/repo

jobs:
  build:
    executor: python_executor
    steps:
      - checkout
      - setup_remote_docker
      - run: 
          name: up
          command: |
            sudo chown root:$(whoami) /run/docker-temp.sock
            docker-compose up -d --build

こんな感じでどうにか動いて、ローカルでCIが動作しました。
明日はpushしてリモートで回してみますが、うまくいくと良いのですが・・・(フラグ)

参考

圧倒的感謝:bow::bow::bow:

3
0
1

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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?