GitLabをdockerでインストールは32ビット Ubuntuでは動かない

  • Docker版GitLabを32ビットUbuntuにインストールしようとした。
  • GitLabのDokcerコンテナは64ビット前提。32ビット機では動かなかった。
  • そもそもdocker未経験で、詳しくは知らない

そこに気づくまでに、いろいろと試行錯誤した覚書です。

gitlabのQAページに答えがありました。

docker image error:standard_init_linux.go:211:execユーザープロセスが「exec format error」を引き起こしました(#4558)・問題・GitLab.org / omnibus-gitlab・GitLab

gitlab / gitlab-ceコンテナはx86_64アーキテクチャ用に構築されています。x86_64アーキテクチャーを持つシステムでコンテナーを実行する必要があります。 ジェラルド・ヒッキー(日本語訳)

あぁ、検証機は32ビット機でした。がっくり…。

でも、dockerインストールのフィーリングはつかめたので、一応記事として残しておくことにします。

結果、dockerコマンドを使う練習くらいにはなったのでOK。

docker pullで、gitlabコンテナイメージをダウンロード

docker pullで、gitlabコンテナイメージをダウンロード
GitLab Community Editionのページには、docker pullコマンドだけがサラッと書いてあります。

なんのこっちゃ、これどうすんの?

とりあえずdockerの基礎をざっくり学びました。

kitematic(Windows) dockerをGUIで/インストール
開発系SEの募集で「dockerが使えること」と書かれているのをよく見かけます。dockerのコマンドは、初見ではなかなかイメージしにくいのでGUI kitematicから入るのがオススメ。

学んだ私が解説すると、こう。

  • gitlabをインストールするには、まずdockerコマンドをインストールせよ。
  • そしたら、「docker pull gitlab/gitlba-ce」ってコマンドを適当なフォルダで実行しろ。
  • dockerコンテナイメージがダウンロードされるから
  • dockerコマンドでコンテナイメージを実行しろ

まあ、docker慣れしたあとに見ると、ああいつものアレね、って感じだけど、初見では「お前はナニを言っているんだ」としか思えません。しょうがないけど。

手元のUbuntu環境には一応dockerコマンドをインストールしてみました。

% sudo docker pull gitlab/gitlab-ce
Using default tag: latest
latest: Pulling from gitlab/gitlab-ce
e80174c8b43b: Pull complete
d1072db285cc: Pull complete
858453671e67: Pull complete
3d07b1124f98: Pull complete
1abbbf4783f5: Pull complete
38a43d00563b: Pull complete
8bbea5a60f40: Pull complete
176bd574f7c7: Pull complete
a8646c9c80ee: Pull complete
089fe821c806: Extracting [=====================> ] 317.5 MB/722.9 MB

しばらく待つと、以下の表示。

Digest: sha256:88f1bcc39aa9917ac4b19022af441b64265d50e1f0c0fa2616d29a2cb82fb41a
Status: Downloaded newer image for gitlab/gitlab-ce:latest

ダウンロードが完了したようです。えー?どこにダウンロードされたんだろう?

docker imagesコマンドで確認できるっぽいです。

% sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gitlab/gitlab-ce latest 0e39d6e67b26 10 hours ago 1.8 GB

1.8GBもあるのか…。コンテナイメージというのは、デカいもんだなぁ。

なんとなくフィーリングでdocker pullしましたが、ここから何をどうやっていいのかわからないので、素直にインストール手順を見直すことにします。

GitLab Community Editionのインストール手順

GitLab Community Editionのインストール手順
GitLabのdockerベースのインストール手順はこちら。

DockerイメージからGitLab環境を構築(GitLab&Runner) #Docker – Qiita

最初に以下のコマンドを実行すれば、必要なイメージを勝手にダウンロードしてくれたっぽいです。

docker runでエラー コンテナを再利用したくば削除せよ

docker runでエラー コンテナを再利用したくば削除せよ
実行してみます。

sudo docker run --detach
--hostname gitlab.example.com
--publish 443:443 --publish 80:80 --publish 22:22
--name gitlab
--restart always
--volume /srv/gitlab/config:/etc/gitlab
--volume /srv/gitlab/logs:/var/log/gitlab
--volume /srv/gitlab/data:/var/opt/gitlab
gitlab/gitlab-ce:latest

えーと、0.0.0.0のポート番号22がすでに使われてる、っていうエラーがでました。

sudo docker run --detach
> --hostname gitlab.example.com
> --publish 443:443 --publish 80:80 --publish 22:22
> --name gitlab
> --restart always
> --volume /srv/gitlab/config:/etc/gitlab
> --volume /srv/gitlab/logs:/var/log/gitlab
> --volume /srv/gitlab/data:/var/opt/gitlab
> gitlab/gitlab-ce:latest
898f5744759fdc2ba96a4ad98870b53f7960e4919ba6a11bdfc0ca931300b272
docker: Error response from daemon: driver failed programming external connectivity on endpoint gitlab (4f934b29bcb2bfd766243017958ae6ab71aa1b9e39b2a16978c1fbfff7edce4c):
Error starting userland proxy: listen tcp 0.0.0.0:22: bind: address already in use.

たしかに、hostnameとかサンプルのままだし、名前解決できずに0.0.0.0になっちゃったのかな。

検証機のホスト名は「ubuntu」だったので、hostnameのところだけ書き換えます。

sudo docker run --detach
--hostname ubuntu
--publish 443:443 --publish 80:80 --publish 22:22
--name gitlab
--restart always
--volume /srv/gitlab/config:/etc/gitlab
--volume /srv/gitlab/logs:/var/log/gitlab
--volume /srv/gitlab/data:/var/opt/gitlab
gitlab/gitlab-ce:latest

そしたら、このエラー。

すでに名前を使われているから、削除せよとのこと。

docker: Error response from daemon: Conflict.
The container name "/gitlab" is already in use by container 898f5744759fdc2ba96a4ad98870b53f7960e4919ba6a11bdfc0ca931300b272.
You have to remove (or rename) that container to be able to reuse that name..

あー、これ、フィーリングでdocker pullやっちゃったからだ。

docker imagesで表示、docker rmiでイメージ削除

docker imagesで表示、docker rmiでイメージ削除
削除しよう。

docker imagesでダウンロード済みイメージのリストをを出して、IMAGE ID指定でdocker rmiで削除…

またエラー。

% sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gitlab/gitlab-ce latest 0e39d6e67b26 10 hours ago 1.8 GB
% sudo docker rmi 0e39d6e67b26
Error response from daemon: conflict: unable to delete 0e39d6e67b26 (must be forced) -
image is being used by stopped container 898f5744759f

停止済みのコンテナで使われていると。

docker psで使用中のコンテナを確認

docker psで使用中のコンテナを確認
えーと、使われているコンテナを見るのは、docker psか。実行。

% sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

あれ、何も表示されないんですけど。さらに調べると、停止しているものも含めて全て表示させるには、docker ps -aを実行するみたいです。

% sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
898f5744759f gitlab/gitlab-ce:latest "/assets/wrapper" 21 minutes ago Created gitlab

出ました。

docker container pruneで停止したコンテナを全削除

docker container pruneで停止したコンテナを全削除
えーと、停止しているコンテナを全て削除するには、docker container pruneで行けるみたいです。(ただし、dockerバージョン1.13以降)

% sudo docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
898f5744759fdc2ba96a4ad98870b53f7960e4919ba6a11bdfc0ca931300b272
99f1413e610d8f4146afdfae30aaa9629d2d5e6eefa08906e5a00c67d6b11c52
c6f4a369357e5a1fed19a75e9b7c0b18f161772abe7ab60d3262afbd9bf65216
e3d359d319da5429cfdd73f72ac0ff061d150c4d2e7d5677d67dd2ad854a612f
028aa506a8c4d350134ea5dd1ea2c12e311c611ac18a8d0cd4bad93961986027
8023af36fd43fd21f990215850a65057154321344e9ef16dfc429152cab66e3f
36c3af73bc8a553a205e896aba43e61fbe4ffea466ffd82e07fed2922a6fdb07
5671b7b44dd2cf1e2ca5ce9eb0dca257b3aa84e990834f1fb9752218d73e0f59
30773bd4e9b85b4bfdec503f0b72295d20b726f825c2214f06d022f4c6d6783f
a13769864f3c95125bb493895acc764fecca4b5c06992d0c334faedd089a1dcd
63dfe0002a4a0a65164fa492d1c3092f418f160189f5960219a3b4cbcab5ff20
f808c978609bcd21f0e8325b0ebfdd22ed4adecd6fc8c36860fbffe084c8684b

Total reclaimed space: 2.363 GB

コマンド実行後、本当に良いか?という問いに「y」と入力して、完全に消えました。

Ubuntuでポート22がbindできないエラー

Ubuntuでポート22がbindできないエラー
改めて、先ほどのコマンドを実行します。

sudo docker run --detach
> --hostname ubuntu
> --publish 443:443 --publish 80:80 --publish 22:22
> --name gitlab
> --restart always
> --volume /srv/gitlab/config:/etc/gitlab
> --volume /srv/gitlab/logs:/var/log/gitlab
> --volume /srv/gitlab/data:/var/opt/gitlab
> gitlab/gitlab-ce:latest
d60fb4c085ca6e0c34286ce672e6770bcde95f68ece44930aa7af594d6200c77
docker: Error response from daemon: driver failed programming external connectivity on endpoint gitlab (fc3f0cd09234610c081ec8e3627dbd03ce2c6b8befc2bd82e51d3f2e6eb6e62f):
Error starting userland proxy: listen tcp 0.0.0.0:22: bind: address already in use.

えーと、また0.0.0.0のポート22が使用済みって出てます。なんじゃこりゃ。

publish指定を削除して実行したら動きました。

publish指定から、22を外しました。

% sudo docker run --detach
--hostname ubuntu
--publish 443:443 --publish 80:80
--name gitlab
--restart always
--volume /srv/gitlab/config:/etc/gitlab
--volume /srv/gitlab/logs:/var/log/gitlab
--volume /srv/gitlab/data:/var/opt/gitlab
gitlab/gitlab-ce:latest
602efddeee788018f415a25ee77e304598693490325e960e443c12e0b1afb274

よし動いた!?

動いてんのかな?

docker logsでログ確認 exec format error

docker logsでログ確認 exec format error
dockerのログを確認するコマンドで見てみます。

sudo docker logs -f gitlab
standard_init_linux.go:178: exec user process caused "exec format error"
standard_init_linux.go:178: exec user process caused "exec format error"
standard_init_linux.go:178: exec user process caused "exec format error"
standard_init_linux.go:178: exec user process caused "exec format error"
standard_init_linux.go:178: exec user process caused "exec format error"
standard_init_linux.go:178: exec user process caused "exec format error"
standard_init_linux.go:178: exec user process caused "exec format error"

exec format error? なにやら致命的。

実は、コンテナの動作前提が64ビットというオチなのでした。