🐘

DockerHubからLatestタグで取得したpostgresイメージのバージョンを確認する

2023/07/13に公開

はじめに

postgresqlのイメージをdockerで使おうと思いcomposeファイルで指定したのですが
postgres:latestで指定、pullしました。

https://hub.docker.com/_/postgres

検証する分にはまあうまく動けばいいのですが、
バージョンが不明だとのちに環境を再現できない可能性があり、手間です。

ということで調査する方法をメモします。
タイトルにpostgresとありますが、すべてのイメージで共通だと思います。

① docker inspectでそれっぽい情報を探す

docker inspectコマンドでコンテナイメージの詳細情報を取得できます。
https://docs.docker.com/engine/reference/commandline/inspect/

だいたい環境変数にバージョンの記載がされているイメージです、みてみましょう。

$ docker image inspect --format '{{ json .Config.Env }}' postgres:latest | jq
[
  "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/15/bin",
  "GOSU_VERSION=1.16",
  "LANG=en_US.utf8",
  "PG_MAJOR=15",
  "PG_VERSION=15.3-1.pgdg120+1",
  "PGDATA=/var/lib/postgresql/data"
]

15.3-1とあります。
確定ではないですがこれがバージョンっぽいです。

② コンテナの中に入って調査する

これが確実でしょう。
コンテナ立ててはいって確認すればよいです。

$ docker run --name some-postgres -e POSTGRES_PASSWORD=secretpassword -d postgres:latest
$ docker exec -it some-postgres psql -U postgres -c 'SELECT version();'
                                                       version                                                       
---------------------------------------------------------------------------------------------------------------------
 PostgreSQL 15.3 (Debian 15.3-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
(1 row)

こちらも15.3-1とあるため、無事バージョン特定と考えられます!

正確にコンテナイメージが管理されているのであれば①、
念の為②を覚えておくとよさそうですね。

③ DIGESTから検索する

inspectコマンドでイメージのDIGESTを取得できます。

$ docker inspect --format='{{index .RepoDigests 0}}' postgres:latest
postgres@sha256:362a63cb1e864195ea2bc29b5066bdb222bc9a4461bfaff2418f63a06e56bce0

このDIGESTと一致しているイメージをdockerhubから探し、ベースイメージなりパッケージを調査すればOKです。
大変ですし、latestのイメージは更新されるので実用的ではなさそうです。

参考

https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier
https://www.creationline.com/lab/aquasecurity/42049
https://github.com/docker/hub-feedback/issues/1925
うーんDIGESTが一致しないパターンもある様子、一応メモまで

Discussion