わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

docker-pgroonga更新

 最新バージョンに追随するよう,PGroongaなどが入ったDockerイメージを作っています.本記事公開時点で最新のPGroonga 2.3.2およびGroonga 11.0.7に基づいています.本日のビルドでは,新たにPostgreSQL 14をベースとしたものを作成しました.
 ただしビルドに少し手間取りました.latestと,pg-13からpg-9までは,問題なくビルドでき,テストスクリプトもokでした.masterブランチから,git checkout -b pg-14を実行してpg-14のブランチを作ったあと,Dockerfileを開いて,「FROM postgres:12-alpine」の12を14に変更しました.そして,docker build -t takehiko/pgroonga:pg-14 .のコマンド実行では,途中で以下のようにエラーが出て,途中終了してしまうのです.

(略)
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing default commands
make: /bin/sh: Operation not permitted
make: *** [Makefile:321: config.h] Error 127
(略)

 PGroongaではなくMeCabのconfigure時のエラーです.
 これについて,docker run -it --rm --name pg14a postgres:14-alpine /bin/shを実行して,Dockerfileに書いていたコマンドを(環境変数を置き換えながら)逐次実行すると,configureでエラー終了とならず,makeも通りました.あれれ…
 検索して,情報を見つけました.

まとめると以下の状況です。

  • Alpine 3.14.0 からシステムコール faccessat2 を使うようになったため、ホストOSで以下を必要とするようになった
    • runc v1.0.0-rc93
    • Docker 20.10.0 以上
    • libseccomp 2.4.4 以上

弊社では、GitLab runner が動作しているサーバーの Docker バージョンを最新にしたらエラーが起きなくなりました。

 「Alpine 3.14.0」には,見覚えがあります.https://hub.docker.com/_/postgresでは,14-alpineとapline3.14が,同じものを参照するタグ名になっています.
 それよりむしろ注意すべきなのは,「Docker 20.10.0 以上」のほうでしょう.docker build ...で失敗している,Ubuntuの端末で,docker versionを実行すると,「19.03.13」と出ました.
 それに対しWSL2の環境だと「20.10.8」です.Ubuntuのブランチをgit branch -D pg-14で取り除き,WSL2のほうでブランチを切ってからビルドすると,うまくいきました.
 takehiko/pgroonga - Docker Image | Docker Hubの記載内容が古く,Dockerイメージは5か月前の内容でした.autobuildをするにはProへのアップグレードが必要となっていました.アップグレードはせず,Docker Hub クイックスタート | Docker ドキュメントを読んで,コマンドラインで(docker loginのあと)「docker push ...」によりプッシュしました.