質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

Dockerを利用したgitlab-ce,gitlab-runnerからDocker socket bindingでDockerを起動できない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,143

KIRIN3

score 17

〇実現したいこと

プロキシ環境内でDockerを使用してgitlab-ce,gitlab-runnerを起動し、gitへのpushリクエストをトリガーに
Docker socket bindingにより、ホスト上のイメージを利用して、Dockerをホスト上で起動してテスト。
という流れを作りたいのですが、runnerがDockerを起動できません。
何か根本的に勘違いしている可能性もあります。
宜しくお願い致します。

以下、XXXXXはホストマシンのドメイン名で、YYYYYはプロキシのドメイン名です。

〇環境

Ubuntu : 18.04.2 LTS (Bionic Beaver)
Docker : 18.09.3

  • gitlab/gitlab-ce : latest
  • gitlab/gitlab-runner : latest
  • docker : stable

〇Jobsのエラーメッセージ

Running with gitlab-runner 11.9.0 (692ae235)
on My Docker Runner 1EKgmzep
Using Docker executor with image docker:stable-git ...
Starting service docker:stable-dind ...
Using docker image sha256:b90ec7b4590e2638ed18d0afff2467a5eea36947c69439a188ed67c3d47e2ef2 for docker:stable-dind ...
Waiting for services to be up and running...
Using docker image sha256:9be5c3cd302ca36143bcd5cc02e5d973ea8f9ebe32f39d6fd36f2dd8d8942840 for docker:stable-git ...
Running on runner-1EKgmzep-project-1-concurrent-0 via 5aa8213698cb...
DEPRECATION: this GitLab server doesn't support refspecs, gitlab-runner 12.0 will no longer work with this version of GitLab
Cloning repository...
Cloning into '/builds/1EKgmzep/0/gitlab/example/test001'...
Checking out 825a868b as master...

Skipping Git submodules setup
$ # Auto DevOps variables and functions # collapsed multi-line command
$ setup_docker
$ build
Logging to GitLab Container Registry with CI credentials...
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
ERROR: Job failed: exit code 1

〇手順

・Docker設定

vi docker-compose.yml

version: '3'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    container_name: gitlab
    hostname: 'XXXXX'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://XXXXX:10080/gitlab/'
        gitlab_rails['time_zone'] = 'Asia/Tokyo'
    ports:
      - '10080:10080'
      - '10443:443'
      - '10022:22'
    volumes:
      - '/gitlab/config:/etc/gitlab'
      - '/gitlab/logs:/var/log/gitlab'
      - '/gitlab/data:/var/opt/gitlab'

  gitlab-runner:
    image: 'gitlab/gitlab-runner:latest'
    restart: always
    tty: true
    container_name: gitlab-runner
    environment:
      - HTTP_PROXY=${HTTP_PROXY}
      - HTTPS_PROXY=${HTTP_PROXY}
      - NO_PROXY=${NO_PROXY}
    volumes:
      - '/gitlab/runner:/etc/gitlab-runner'
      - '/var/run/docker.sock:/var/run/docker.sock'

・ホスト環境変数

export HTTP_PROXY=http://YYYYY:3128/
export HTTPS_PROXY=http://YYYYY:3128/
export NO_PROXY=docker:2375,docker:2376
・起動

docker-compose up -d

・URLとtokenの取得

GitLabにアクセス
一般ユーザーアカウント作成、ログイン
一般ユーザーでグループ作成(example)
グループにプロジェクト作成(test001)
プロジェクト内のSettings → CI/CD → Runners
記載されているURLとtokenをコピー

URL:http://XXXXX:10080/gitlab/
token:tKd3dQz6KXCzakTkQRnG

・事前にテスト環境のイメージをダウンロード

docker pull docker:stable

・Runnerの環境設定
docker exec -it gitlab-runner gitlab-runner register -n \
  --url http://XXXXX:10080/gitlab/ \
  --registration-token tKd3dQz6KXCzakTkQRnG\
  --executor docker \
  --description "My Docker Runner" \
  --docker-pull-policy "never" \
  --docker-image "docker:stable" \
  --docker-privileged \
  --docker-volumes "/var/run/docker.sock:/var/run/docker.sock" \
  --docker-volumes "/builds:/builds"
・連携を確認

GitLabにアクセス
プロジェクト内のSettings → CI/CD → Runnersに以下があることを確認

Runners activated for this project

    1EKgmzep
    #1

    My Docker Runner


を確認

・GitLab上のRunnerの設定

[Checked] Paused Runners don't accept new jobs
[Not checked] This runner will only run on pipelines triggered on protected branches
[Checked] Indicates whether this runner can pick jobs without tags
[Checked] When a runner is locked, it cannot be assigned to other projects
Tags は空

・gitに.gitlab.ymlを作成

☆とりあえず超シンプルな設定にします。
cd /gitlab/data/git-data/repositories/example/test001.git
vi .gitlab.yml

image: docker:stable
    - test
example:
    stage: test
    script:
        - ls
・gitをpush

一般ユーザーアカウントにて
git clone http://XXXXX:10080/gitlab/example/test001.git
cd test001
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

gitlabのページで確認すると上記のエラー

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

.gitlab.ymlの位置が悪かったみたいです。
直接ファイルを追加でなく、リポジトリにpushすることで解決しました。

ご回答頂きありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

状況としましては、Dockerイメージを使ってコンテナを起動するため、Dockerイメージを取得しようとしていますが、通信できない状態です。
Docker(デーモン)をproxy配下で動かす場合は、HTTP・HTTPSのproxy設定が必要になります。
https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
まず、こちらのページにあるような設定が入っていて、docker pull hello-worldなど、イメージをpullできる状態かどうか設定確認されることをおすすめします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/24 16:17

    回答ありがとうございます。
    返事が遅くなりすみません。

    記載漏れですみませんが、Docker外で上記のURLのプロキシ設定は入れております。

    # mkdir /etc/systemd/system/docker.service.d
    # vi /etc/systemd/system/docker.service.d/http-proxy.conf
    ---------------------
    [Service]
    Environment="HTTP_PROXY=http://YYYYY:3128/"
    Environment="HTTPS_PROXY=http://YYYYY:3128/"
    ---------------------
    # systemctl daemon-reload
    # systemctl restart docker

    もちろんDocker外ではdocker pull hello-worldも可能になっています。
    Docker内で上記の設定はしておりません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る