1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プライベートgitlabのcontainer registyを使う

Last updated at Posted at 2021-10-05

ローカルに立てたgitlab container registryへdocker pushして、さんざん404エラーを食らったのでメモを残しておきます。

エラーの例。

> docker push myname.local/group1/subgroup1/app01:latest
The push refers to repository [myname.local/group1/subgroup1/app01]
aedce5ed85dc: Preparing
e2eb06d8af82: Preparing
error parsing HTTP 404 response body: invalid character '<' looking for beginning of value: "<!DOCTYPE html>\n<html>\n<head>
<以下略>

ポイント

registryで使用するホスト名(ポート番号込み)を、gitlab/dockerで一貫させないとハマります。

環境

動作環境

  • gitlab-eeはテスト用なのでdockerで動かした(重要な環境での使用はおすすめしない。all in one containerの構成にはおじさんなので抵抗がある。キッパリ)。
  • OS:Ubuntu 21.04
  • docker:version 20.10.7, build 20.10.7-0ubuntu1~21.04.1 (ubuntuが配ってるdocker.ioパッケージ)
  • container image:gitlab/gitlab-ee:14.3.2-ee.0
  • gitlabはnon https
  • gitlab側の認証はsshではなくてhttp

設定

gitlab.rb

registry_external_urlに、dockerを動かしてるホストの名前と、80番以外のポートを指定し、更にgitlab_railsも設定(以下"myname.local"をdocker動作ホストのhostname fqdnに置換してください。fqdnでなくてもいいんじゃないかと思いますが私はfqdnで指定しました)

gitlab.rb
registry_external_url 'http://myname.local:5050'
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = "myname.local"
gitlab_rails['registry_port'] = "5050"

docker

registryが非httpsなので、ホストで動作するdockerdにそれを教えてあげる。service側で引数に設定しても動くんじゃないかと思うが、/etc/docker/daemon.jsonで設定した。ポート番号まで込みで教えてあげるのがポイント。defaultで存在しているエントリlocalhost:32000はいらん気がするがとりあえず残した。

daemon.json
{
    "insecure-registries" : ["localhost:32000","myname.local:5050"] 
}

実行コマンド

docker run

基本的にはマニュアル通りだが、上記gitlab.rbで指定したポートも転送指定する。22番も重複するので変えている。(gitlab.rbでssh止めるほうがいいと思うが、やりかたがすぐにはわからなかったのでpublishで曲げて楽した)
諸々面倒なことを特権で逃げてます。
当たり前ですが変数GITLAB_HOMEは適当に設定してあげてください。

> docker run -it --privileged --hostname myname.local --publish 443:443 --publish 80:80 \
--publish 2022:22 --publish 5050:5050 --name gitlab \
--volume $GITLAB_HOME/config:/etc/gitlab --volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab gitlab/gitlab-ee

docker login, build, tag, push

docker login/build/tag/push は、ポート番号まで込みで実行する。
loginの場合、ポート指定なし(80で動作)でもSuccessするが、それではpushしたときに404になる。
Passwordはgitlabで発行しておいたtokenを指定する。token発行時にregistry read/write権限は必須だとは思うがそれなしだとどうなるかは未検証。めんどくさいのでrepository read/write含めて全部付与したという・・・

> docker login myname.local:5050
Username: hogehoge
Password:
WARNING! Your password will be stored unencrypted in /home/xxx/.docker/config.json.                                        
Configure a credential helper to remove this warning. See                                                                    
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

image名にも一貫性を持たせる必要がある。docker tagはこんな感じ。

> docker tag myimage myname.local:5050/group1/subgroup1/app01:0.1 

必然的にdocker pushも、ポート番号込みのイメージを使うことになります。一貫してますね。

> docker push myname.local:5050/group1/subgroup1/app01:0.1

おしまい。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?