GitLab の Dependency Proxy が記述された Dockerfile は Renovate で更新できない
はじめに
この記事は、FUJITSU Advent Calendar 2025 2日目の記事です。
GitLab CI 上でイメージの取得元を Dependency Proxy経由するために、Dockerfile を次のように書くことがあります。
ARG CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX=gitlab.com:443/norikmb/dependency_proxy/containers
FROM ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/python:3.12-slim
Dependency Proxy経由することで、以下のような利点があります。
- 速度向上・キャッシュ最適化: CI ごとに Dependency Proxy にキャッシュされるため、同じベースイメージの取得が高速化できる
- レート制限・外部依存の抑制: 公開レジストリのレート制限や一時的な障害の影響を受けにくい
参考: https://docs.gitlab.com/user/packages/dependency_proxy/#authenticate-within-cicd
Renovate利用での課題
Dockerのタグの更新を自動化するためのツールとして Renovate があります。
GitLab での導入方法は以下を参考にしてください。
参考: https://gitlab.com/renovate-bot/renovate-runner/
しかし、前提の話のように、Dockerfile 内のイメージ参照が変数でプレフィックスされていると、Renovate の標準の Dockerfile 解析ではベースイメージのタグ更新が検出されません。
Renovate は Dependency Proxy を含む文字列全体を「レジストリ/イメージ」として解釈しに行くため、解決に失敗します。ログ例は次のとおりです。
WARN: Package lookup failures (repository=norikmb/dependency-proxy-for-container-images, branch=renovate/python-3.x)
"warnings": [
"Failed to look up docker package gitlab.com:443/norikmb/dependency_proxy/containers/python"
],
"files": ["Dockerfile"]
暫定対処
本来であれば、Renovate から Dependency Proxy を解決したかったのですが、上手くいかなかったので暫定対応として以下で解決しました。
次のように renovate.json を記述します。
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended"
],
"registryAliases": {
"gitlab.com:443/norikmb/dependency_proxy/containers": "mirror.gcr.io"
},
"regexManagers": [
{
"fileMatch": ["/(^|/|\\.)Dockerfile$/"],
"matchStrings": [
"FROM \\/$\\/{?CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX\\/}?/?(?<depName>.*?):(?<currentValue>.*?)\\s"
],
"datasourceTemplate": "docker"
}
]
}
ポイントは以下の通りです。
regexManagers: 変数付きFROM行から依存名(例:python)と現在のタグ(例:3.12-slim)を正規表現で抽出depName: ベースイメージ名currentValue: 現在のタグdatasourceTemplate: docker: Docker イメージとしてバージョン取得・更新提案を行う指定
registryAliases: 実ビルド時は Dependency Proxy を使い続けつつ、Renovate の解決時は別リポジトリ(ここではmirror.gcr.io)を参照させる
また、今回の調査で初めて知ったのですが、Dockerfile の命名規則は
Some projects may need distinct Dockerfiles for specific purposes. A common convention is to name these
.Dockerfile.
参考: https://docs.docker.com/build/concepts/dockerfile/#filename
まとめ
GitLab の Dependency Proxy を利用した Dockerfile を Renovate で正しく更新するには、regexManagers と registryAliases を組み合わせて設定する必要がありました。
文献が少なく、結構詰まったのでハマりポイントとしてメモしておきます。