概要
Dockerのgitlab-ce公式イメージを使ってローカルにgitlabサーバを立てた際にハマった話です
公式サイトのdocker-compose
の項目の通りに進めたが、環境特有の問題が発生していました。
https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose
環境
- OS:MacOS 10.14.6(Mojave)
- Docker ver:19.03.5, build 633a0ea
- gitlab-ce Image:gitlab/gitlab-ce:12.6.4-ce.0
起きたこと1
コンテナを起動した後、ブラウザからlocalhostで当たってみても502エラー画面になって先に進めません。
導入系の記事はだいたい特に設定変えなくても普通に使えるみたいなこと書いてあるのに。。
原因
結局、MacOSかつファイルシステムがHFS+かつdocker-composeで立ち上げたときだけ、gitlabコンテナ内のunicornで必要なソケットファイルを作れなかったという不思議な現象でした。
https://gitlab.com/gitlab-org/omnibus-gitlab/issues/3196
unicornはrailsで一般的なhttpサーバ用のミドルウェア的のようです。(gitlabがrails製と初めて知った。。)
対処法
https://gitlab.com/gitlab-org/omnibus-gitlab/issues/3444#note_76084668
このissueの通り、コンテナ内/etc/gitlab/gitlab.rb
のunicorn['socket']
を独自の短いパスにしてgitlab-ctl reconfigure
したら無事にアクセスできるようになりました
※docker-compose.ymlで指定してコンテナ作り直してもOKです
起きたこと2
その後ユーザ作成してログインし、プロジェクトを作成しようとしたところ、今度はプロジェクトの作成実行時に503エラーになってプロジェクトを作れませんでした。
原因
今回もgitlab-ctl tail
でエラーを見ていたら、今度はgitalyのソケットファイル名が長すぎるとな。
time="2020-01-25T15:36:17Z" level=fatal msg="load config" config_path=/var/opt/gitlab/gitaly/config.toml error="socket could not be created in /var/opt/gitlab/gitaly/internal_sockets: listen unix /var/opt/gitlab/gitaly/internal_sockets/test-53d27540.sock: bind: file name too long"
対処法
gitla.rbのgitaly['internal_socket_dir']
を適当に短く変えてまたgitlab-ctl reconfigure
したらプロジェクト作れるようになりました。
エラーに記載のある/var/opt/gitlab/gitaly/config.toml
を変えてもreconfigureしたときにgitlab.rb側が優先されるので意味ないみたいです。
起きたこと3
作成したプロジェクトをcloneしようとしたら、ドメインがgitlab.example.com
になっており、それではcloneができません。(何かが「起きた」訳ではない)
これはdocker-cimpose.yml
に記載したexternal_url
が反映されている訳ですが、ホストOSの/etc/hosts
にIPとドメインを書けば解決するはず、と思っていました。
原因
どうやらdocker for macはホストOSからコンテナへのIPアドレスでのアクセスが不可能らしいです。
公式が「The docker (Linux) bridge network is not reachable from the macOS host.」って宣言してます。
https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
対処法
公式は不可能と言っているもののsock proxyをうまく使えば回避ができるようです。
https://github.com/docker/for-mac/issues/2670
ただ、貼ってあるdocker imageのパスが404になっていて、個人的に最優先ではなかったのでまだ試せていません。
この筋で調べると色々と出てくるので多分解決できるんだと思う。
ネットワーク周り知識不足で怖いので、複数のコンテナを同時に立ち上げて色々したくなったら検討します。
参考サイト
- 一番下に困ったときのエラーの見方が書いてあり、最初どうやって調べていいかもわからなかったので助かった。