私がしたいGitLabパイプラインがあります。
私が持っている主な問題は、これが機能することです:
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)
あなたが追加した情報として、私はこれがうまくいくことを願っています:
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変数を設定しないようです。
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を使用することはお勧めしません。