web-dev-qa-db-ja.com

GitLab CIランナーからdocker-in-dockerへの接続

私がしたいGitLabパイプラインがあります。

  1. Javaアプリをビルドする
  2. Docker-composeを使用してテストする
  3. Dockerリポジトリにプッシュする

私が持っている主な問題は、これが機能することです:

services:
  - docker:dind

docker_test:
  stage: docker_test
  image: docker:latest
  script:
  - docker version

出力は期待どおりに出力されます。

> gitlab-ci-multi-runner exec docker --docker-privileged docker_test
...
$ docker version
Client:
 Version:      17.06.0-ce
...
Server:
 Version:      17.06.0-ce
...
Build succeeded

これはしないdocker-ceのインストール手順は省略):

services:
  - docker:dind

docker_test:
  stage: docker_test
  image: ubuntu:latest       << note change
  script:
  - docker version

それは失敗します:

$ docker version
Client:
 Version:      17.06.0-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:23:31 2017
 OS/Arch:      linux/AMD64
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
ERROR: Build failed: exit code 1
FATAL: exit code 1

ubuntuイメージ(またはプロジェクトをビルドするイメージ)をリンクされたDocker-in-Dockerサービスに接続するにはどうすればよいですか? docker:latestは何をしていないのですか

GitLabサービスのドキュメント を読みましたが、ホスト名の観点からのみ意味があります。 (mysqlサービスがある場合は、mysql:3306経由で接続できます。)

編集:コマンドをecho $DOCKER_Hostに更新すると、docker:latest画像に表示されます。

$ echo $DOCKER_Host
tcp://docker:2375

そして、私が見るubuntu:latest画像:

$ echo $DOCKER_Host
(nothing - but SO doesn't let me add a blank code line)
16
Craig Otis

あなたが追加した情報として、私はこれがうまくいくことを願っています:

services:
  - docker:dind

docker_test:
  stage: docker_test
  image: ubuntu:latest
  variables:
      DOCKER_Host: "tcp://docker:2375"
  script:
  - docker version

または:

services:
  - docker:dind

docker_test:
  stage: docker_test
  image: ubuntu:latest 
  script:
  - export DOCKER_Host=tcp://docker:2375
  - docker version

GitlabはカスタムイメージのDOCKER_Host変数を設定しないようです。

19
Robert

Gitlab CIランナーは、DockerでDockerを実行するために、ホストDockerソケットをマウントする必要があります。例えば:

docker exec gitlab-runner gitlab-runner register \
           --non-interactive \
           --url https://gitlab.com/ci \
           --registration-token TOKEN\
           --description "Docker Runner" \
           --tag-list "docker" \
           --executor docker \
           --docker-image "docker:latest" \
           --docker-volumes /var/run/docker.sock:/var/run/docker.sock

ご覧のとおり、最後のパラメーターとしてdocker.sockがここにマウントされています。ただし、Gitlab CIには独自の構文 https://docs.gitlab.com/ce/ci/docker/using_docker_images.html があるため、Gitlab CIにdocker-composeを使用することはお勧めしません。

3
madnight