Docker for Windows に GitLab CE をインストールする

ちょっとはまったので備忘録。

TL;DR

コンテナにホストのファイルシステムをマウントして使おうとするとうまくいかない事がある (パーミッション問題?) ので、そのような時は volume を作ってそっちにマウントする。

GitLab の設定

Docker for Windows は Ver.18.09.2 を使用。

GitLab の Docker イメージは offical ( gitlab/gitlab-ce ) を利用します。

Docker Compose のファイル を落としてきてマウント先をホストの任意のディレクトリに設定。起動しようとすると下記のようなエラーが出ます。

Error executing action run on resource 'ruby_block[directory resource: /var/opt/gitlab/git-data]'

これの回避の仕方が下記の Issue に記載されています。

ここでの結論は "/var/opt/gitlab" のマウント先をホストではなく volume を作成してそちらにマウントする、でした。

おそらくこちらの記事と同じ理由。

実際やってみると初期化まではうまくいきますが、ユーザーの ssh 公開鍵の登録がうまくいきませんでした。ので "/etc/gitlab" も volume を作成してマウントしてみると公開鍵の登録も成功し、 git push も ssh で通るようになりました。 (これはもしかしたら関係ないかも)

ログ ("/var/log/gitlab") は今のところ問題なかったのでホストにマウントさせています。

別件で最近の GitLab のイメージは Let's Encrypt を使うようになっているとのことなのですが、ローカルで使うには不要なのでオプションで無効化しています。

volume の作成:

> docker volume create gitlab-data
> docker volume create gitlab-config

Docker Compose:

version: "3"

services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: '{PC名}'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url '{URL}'
        letsencrypt['enable'] = false
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - 'gitlab-config:/etc/gitlab'
      - '{ホストへのログ保存先}:/var/log/gitlab'
      - 'gitlab-data:/var/opt/gitlab'
volumes:
    gitlab-data:
        external: true
    gitlab-config:
        external: true