ubuntu-slimは、GitHub Actionsのジョブを1コア・メモリ5GBのコンテナで動かす軽量ランナーです。Docker CLIは入っていますがデーモンが無いため、container:、services:、Dockerコンテナアクション、docker buildは動きません。標準の構成で使えるのはdocker loginやレジストリへの問い合わせ、docker compose configのような設定の検証です。
2026年11月はubuntu-latestがUbuntu 26.04へ切り替わる時期で、24.04のままのubuntu-slimとの間にOSの差が生まれます。この記事では2026年11月8日時点の公式ドキュメントとrunner-imagesリポジトリ、デーモンの無い環境での実測をもとに、動く処理と動かない処理、移すジョブの選び方を整理します。
まとめ:ubuntu-slimで動くDocker操作と移行の判断条件
container:、services:、Dockerコンテナアクション、docker build・pull・runは動きません。ランナーにDockerデーモンが無いからです。docker login、docker manifest inspect、docker buildx imagetools、docker compose configはデーモン無しで通ります。タグの確認と付け替えならubuntu-slimで足ります。イメージのビルドは、外部のBuildKitへ接続する構成なら可能です。- 仕様は1コア・メモリ5GB・ストレージ14GBのx64コンテナで、OSはUbuntu 24.04です。ジョブは15分に達すると打ち切られて失敗します。
ubuntu-latestは2026年11月19日までにUbuntu 26.04へ移る予定ですが、ubuntu-slimは対象外です。ジョブ間でバイナリを受け渡すなら、ビルド側はubuntu-24.04に固定してください。- 向いているのはラベル付け、lint、API呼び出し、イメージのタグ付け替えです。分単価は0.002ドルでも課金は分単位の切り上げなので、移行前後の課金分数で費用を比べます。
ubuntu-slimの仕様と料金(2026年11月時点)
ubuntu-latestとのスペック比較
GitHubホストランナーのリファレンスでは、ubuntu-slimのスペックはパブリックとプライベートで変わりません。ubuntu-latestはパブリックリポジトリだと4コア・16GBに増えるので、プライベートのほうがubuntu-slimとの差は小さくなります。
| 項目 | ubuntu-slim | ubuntu-latest(プライベート) | ubuntu-latest(パブリック) |
|---|---|---|---|
| CPU | 1 | 2 | 4 |
| メモリ | 5GB | 8GB | 16GB |
| ストレージ | 14GB | 14GB | 14GB |
| 実行形態 | コンテナ(非特権) | VM | VM |
| ジョブの上限 | 15分 | 6時間 | 6時間 |
| アーキテクチャ | x64のみ | x64 | x64 |
| 分単価 | 0.002ドル | 0.006ドル | 無料 |
各ジョブは公式のいう「hypervisor level 2 isolation」で隔離されたコンテナで起動し、終わると破棄されます。イメージの一覧にある現行版は20261101.43.1で、OSはUbuntu 24.04.5 LTSです。2026年1月22日の一般提供の告知以降、プレビューの扱いではありません。
arm64版はありません。2026年7月に立った要望のissue #14446は11月時点でも未解決です。x64とarm64の両方でビルドするなら、arm64側はubuntu-24.04-armに残します。ラベルの記法はGitHub Actionsのruns-onで扱っています。なお、Azure PipelinesのMicrosoftホストエージェントでは使えず、runner-imagesのメンテナーは追加の予定は無いと答えています。
分単価とドル建ての利用枠
料金ページの単価は、ubuntu-slimにあたるLinux 1コアが0.002ドル、Linux 2コアが0.006ドルで、ちょうど3分の1です。プレビュー期の記事にある「4分の1」は、2026年1月の値下げ前の比較です。
プライベートリポジトリの利用枠は、いまは分数でなく金額で表されます。プラン別の枠は月額でFreeが12ドル、Proが18ドル、Free for organizationsが12ドル、Teamが18ドル、Enterprise Cloudが300ドルです。Freeの12ドルをほかの用途に使わなければ、ubuntu-slimで6,000分、2コアのubuntu-latestで2,000分に相当します。枠の計算はGitHub Actionsの料金で詳しく解説しています。
ubuntu-slimでDockerが動かない処理と使える操作
Docker CLIだけが入りデーモンが無い構成
イメージ一覧にはDocker Client 29.9.2、Docker Compose 5.6.1、Docker-Buildx 0.38.1が並びますが、通常のUbuntuイメージにあるDocker Serverがありません。runner-imagesのinstall-docker-cli.shは、冒頭で理由を明記しています。
## Desc: Install Docker CLI and plugins (Compose, Buildx) but not the engine.
## The Docker daemon is not included since ubuntu-slim runs as a container.
## ubuntu-slim does not run in Privileged mode, so functionality from these tools is limited.
## It cannot build or run containers locally.
後からデーモンを入れる回避策も通りません。公式リファレンスは、非特権モードのためファイルシステムのマウントやDocker-in-Dockerは使えないと書いています。docker/setup-docker-actionでデーモンを起動しようとしてiptablesの権限不足で失敗した報告も、issue #13583に残っています。手元の非特権コンテナでdockerdを起動しても、同じくfailed to create NAT chain DOCKERで終了しました。
ubuntu-slimで動かないcontainer・services・Dockerコンテナアクション
次の3つはランナー側のDockerデーモンを前提にしています。
jobs.<job_id>.containerでジョブ全体をコンテナ内で実行する書き方services:でPostgreSQLやRedisを横に立てる結合テストruns.using: dockerで作られたアクション
見落としやすいのは3つ目です。ワークフローにdockerの文字が無くても、使っているアクションがDockerコンテナアクションなら、Dockerイメージの取得・ビルド・起動のいずれかの段階で止まります。アクションのaction.ymlにあるruns.usingを、移行前に確認してください。
container:への対応を求めたissue #13541に、メンテナーは、Ubuntu Slimのエージェントは既にコンテナであり、Docker-in-Dockerを支える保守負担に見合うか疑問だとして、断る可能性が高いと答えています。対応を待つ設計は取らないほうが安全です。DBを立てるテストはGitHub Actionsのサービスコンテナ(services)のとおりubuntu-latestで動かし、イメージのビルドもGitHub ActionsでDockerイメージをビルドするの構成のまま残します。
デーモン無しで通るdockerコマンドの実測
どのコマンドがデーモンを必要とするかは公式の一覧がありません。そこで2026年11月8日に、ubuntu:24.04のコンテナへinstall-docker-cli.shと同じaptリポジトリからCLIを入れ、docker.sockが無い状態で実行しました(Docker CLI 29.9.3、Buildx 0.38.1、Compose 5.7.0)。イメージと同じDocker CLI 29.9.2とCompose 5.6.1でも、主要なコマンドの結果は同じでした。実際のubuntu-slimランナー上での結果ではなく、デーモンの有無だけを再現した検証です。レジストリの操作は、認証付きのローカルレジストリに対して確かめています。
| コマンド | 結果 | 用途 |
|---|---|---|
docker login |
成功 | レジストリへの認証 |
docker manifest inspect |
成功 | タグの存在確認 |
docker buildx imagetools inspect |
成功 | digestと対応プラットフォームの確認 |
docker buildx imagetools create |
成功 | pullせずにタグを付け替え |
docker compose config |
成功 | Composeファイルの検証 |
docker pull・run・images |
失敗 | デーモン必須 |
docker build・buildx build |
既定のビルダーでは失敗 | デーモン必須 |
buildx build(remoteドライバー) |
成功 | 外部のBuildKitでビルド |
buildx build --load(remoteドライバー) |
失敗 | 読み込み先のデーモンが無い |
docker buildx create --driver docker-container |
失敗 | ビルダー用コンテナを起動できない |
docker compose up・pull |
失敗 | デーモン必須 |
ローカルのデーモンが要る操作は、どれも同じエラーで止まります。ubuntu-slimでDocker関連のジョブが落ちたときは、このメッセージが出ていないかを最初に見てください。
failed to connect to the docker API at unix:///var/run/docker.sock; check if the path is correct and if the daemon is running: dial unix /var/run/docker.sock: connect: no such file or directory
イメージのビルドだけは別の道があります。Buildxのremoteドライバーで外部のBuildKitへ接続すれば、docker.sockが無くてもビルドでき、実測では--output type=ociでtarファイルへ出力できました。ただしBuildKitを別に用意して認証付きで公開する必要があり、--loadはローカルのデーモンが無いので失敗します。1台のBuildKitを保守してまで1コアのランナーに載せる理由は薄いので、通常はビルドジョブをubuntu-latestに残すほうが得策です。
イメージのタグ確認と付け替えをubuntu-slimで実行
実測で通った操作を組み合わせると、ビルド済みイメージにリリースタグを付けるジョブはubuntu-slimで完結します。imagetools createはローカルのDocker Engineへイメージを取得せずに、レジストリ上でタグを作れるからです。マルチアーキのイメージを渡した実測では、digestは元のイメージと同じでした。公式リファレンスによると、単一プラットフォームのマニフェストを渡すと既定でマニフェストリストに変換されるので、元の形式を保つ場合は--prefer-index=falseを指定します。次の例のghcr.io/example/appは仮の名前です。実行元リポジトリに対象パッケージへの書き込み権限を付与し、参照元のタグが存在する名前へ置き換えてください。
jobs:
promote:
runs-on: ubuntu-slim
timeout-minutes: 5
permissions:
contents: read
packages: write
steps:
- name: GHCRへログイン
env:
GH_TOKEN: ${{ github.token }}
run: echo "$GH_TOKEN" | docker login ghcr.io -u "$GITHUB_ACTOR" --password-stdin
- name: 検証済みイメージの存在確認
run: docker buildx imagetools inspect ghcr.io/example/app:sha-abc123 > /dev/null
- name: リリースタグの付与
run: docker buildx imagetools create --tag ghcr.io/example/app:1.4.0 ghcr.io/example/app:sha-abc123
imagetools inspectの失敗はタグが無い場合に限りません。認証エラーやレジストリの障害でも終了コードが0以外になるので、ジョブが落ちたらログのメッセージで原因を見分けてください。
Docker HubのUbuntu公式イメージとslimタグの有無
ubuntu-slimはGitHub Actionsのランナーラベルで、Dockerイメージのタグではありません。Docker Hubの公式ubuntuリポジトリをタグ名「slim」で検索すると、2026年11月8日時点のAPI応答は0件でした。slimの付くタグを持つのはdebian:trixie-slimなどDebian側です。
Ubuntuベースのまま軽いイメージが欲しい場合、まずubuntu:24.04をそのまま試せば足ります。同じAPIのamd64圧縮サイズはubuntu:24.04が29,767,612バイト、debian:trixie-slimが29,856,132バイトでほぼ同じです。ubuntu:26.04は42,140,312バイトで、24.04より約4割大きくなっています。さらに削るならCanonicalのChiselで、Debianパッケージの必要なファイルだけを切り出す方法があります。
ubuntu-latestのUbuntu 26.04移行で生じるubuntu-slimとの差
runner-imagesのissue #14748によると、ubuntu-latestのUbuntu 26.04への切り替えは2026年10月19日から段階的に始まり、11月19日に完了する予定です。影響を受けるイメージの欄でUbuntu Slimにチェックは付いておらず、ubuntu-slimのDockerfileもFROM ubuntu:24.04のままです。つまり移行が終わると、ジョブごとにOSのメジャー版が分かれます。
| 項目 | ubuntu-slim | ubuntu-24.04 | ubuntu-26.04 |
|---|---|---|---|
| OS | 24.04.5 | 24.04.5 | 26.04.1 |
| glibc | 2.39 | 2.39 | 2.43 |
| Python | 3.12.3 | 3.12.3 | 3.14.4 |
| Node.js | 24.22.2 | 22.23.4 | 24.22.2 |
| Perl | 5.38.2 | 5.38.2 | 5.40.1 |
| Docker Client | 29.9.2 | 28.0.4 | 29.4.2 |
| Docker Server | なし | 28.0.4 | 29.4.2 |
表はrunner-imagesの各Readme(いずれも20261101版)の値で、glibcだけは公式コンテナのubuntu:24.04とubuntu:26.04でldd --versionを実行した結果です。
実害が出るのは、26.04でビルドしたバイナリをubuntu-slimで実行する組み合わせです。glibc 2.41で入ったsched_getattrを呼ぶC言語のプログラムをubuntu:26.04でコンパイルし、ubuntu:24.04で動かすと起動できませんでした。
$ /tmp/g
/tmp/g: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.41' not found (required by /tmp/g)
exit=1
動くかどうかは、バイナリが要求するシンボルのバージョンで決まります。文字列を出力するだけのプログラムは要求がGLIBC_2.34までで、26.04でビルドしても24.04で動きました。要求の中身はobjdump -Tで確認できますが、依存ライブラリの更新でも変わるため、一度通ったから安全とは言えません。needsとupload-artifactでビルド結果をubuntu-slimのジョブへ渡しているワークフローは、ビルド側をubuntu-latestのままにせずubuntu-24.04に固定してください。公式も問題が出た場合の戻し先としてこのラベルを案内しています。
キャッシュも同じ理由で分けます。runner.osはどちらもLinuxを返すため、${{ runner.os }}だけをキーに入れていると、26.04で作ったネイティブモジュールをubuntu-slimが復元しかねません。キーにランナー名の文字列を足すと衝突を避けられます。キーの設計はGitHub Actionsのキャッシュを参照してください。
ubuntu-slimに入っていないツールと追加時の注意
ubuntu-24.04との差分
入っている言語ランタイムはNode.js、Python、Perlです。ほかにGit、GitHub CLI、AWS CLI、Azure CLI、Google Cloud CLI、PowerShell、jq、yq、makeとgccがあります。ubuntu-24.04のイメージ一覧と突き合わせると、ubuntu-slimに無い主なものは次のとおりです。
| 分類 | ubuntu-24.04にだけあるもの |
|---|---|
| 言語・ビルド | Java系(Maven・Gradle)、Ruby、Rust、Kotlin、Swift、CMake |
| パッケージ管理 | Yarn、Homebrew、Miniconda、Composer、Vcpkg |
| コンテナ | Docker Server、Podman、Buildah、Skopeo |
| Kubernetes | kubectl、Helm、Kind、Minikube |
| ブラウザ | Google Chrome、Chromium、Firefox、Microsoft Edge |
| データベース | MySQL、PostgreSQL |
| IaC | Pulumi、Packer、Ansible |
メンテナーは軽量さを優先しており、追加要望の多くは見送られています。kubectlの要望(#13670)は「追加しない」とされ、代わりにazure/setup-kubectlを案内されました。columnを含むbsdextrautilsも#13759で自前の導入を勧められています。足りないものは実行時に入れる前提で設計し、その時間も15分に含めて見積もってください。
aptとsetup-nodeで起きる既知の差
aptでは、apt-get installの前にsudo apt-get updateを必ず入れます。パッケージリストが空で失敗するというissue #13426は修正後も再発の報告が2026年5月まで続き、11月時点でも開いたままです。
setup-nodeにnode-version: 24を指定すると、ubuntu-latestではキャッシュ済みの版を使うのに対し、ubuntu-slimでは新しい版をダウンロードするという報告もあります(#13671)。メンテナーは、プリインストール済みのNode.jsを使う回避策としてnode-versionを省略する方法か、完全な版番号で固定する方法を示しています。
非特権コンテナで動かないカーネル機能
Dockerのほかにも、権限が要る機能は使えません。issue #13602ではio_uringを使うソフトウェアの失敗が報告され、メンテナーは「アーキテクチャが非特権モードに結び付いている」として対応を見送りました。同じissueで、ubuntu-slimと他のUbuntuイメージとの完全な互換は約束していないとも答えています。カーネルの機能を直接使うテストはubuntu-latestに残してください。
ツールの版も、通常のイメージとは別に動きます。2026年5月にはGitが2.43へ下がる不具合(#14014)があり、6月の更新で直りました。移行後に挙動が変わったら、ジョブログのSet up jobでイメージの版を確認するのが近道です。
ubuntu-slimに移すジョブと移さないジョブの判断
公式はこのランナーを、自動化やissue操作、短時間のジョブ向けと位置付け、一般的な重いCI/CDビルドには適さないとしています。GitHubの告知が挙げる用途は、issueの自動ラベル付け、webpackのような基本的なビルド、lintとフォーマット、外部ツールへのAPI呼び出し、簡単なPythonスクリプトです。
移さないのは、次の条件に1つでも当てはまるジョブです。
- 現在の所要時間が10分を超える(1コアに減って伸びると15分の上限に届く)
services:、container:、Dockerコンテナアクション、docker buildを使う- E2Eテストでブラウザを起動する
make -jやテストの並列実行で時間を縮めている- arm64向けにネイティブビルドする
費用は課金分数に単価を掛けて比べます。料金ページには「GitHub rounds the minutes and partial minutes each job uses up to the nearest whole minute」とあり、ジョブごとに分単位で切り上げられます。2コアで50秒(課金1分・0.006ドル)のジョブがubuntu-slimで2分10秒(課金3分・0.006ドル)に伸びると、単価が3分の1でも費用は同じです。10秒のジョブが40秒に伸びる程度なら、どちらも課金1分でubuntu-slimのほうが安く済みます。この単価比較では、移行後の課金分数が移行前の3倍未満に収まれば、計算上の利用料を減らせます。
移す前に、今のジョブの所要時間をGitHub CLIで確認しておきます。
gh run list --workflow ci.yml --limit 10 --json databaseId --jq '.[].databaseId'
gh run view <run-id> --json jobs \
--jq '.jobs[] | select(.conclusion == "success") | [.name, ((.completedAt | fromdateiso8601) - (.startedAt | fromdateiso8601))] | @tsv'
2つ目のコマンドは、成功したジョブの名前と所要秒数をタブ区切りで出します。スキップされたジョブは開始・終了時刻が正しく入らず負の値になることがあるため、conclusionで絞っています。CI全体の分割や移行の設計を外部に任せたい場合は、DevOps・CI/CD導入支援もご相談いただけます。
ubuntu-slimへの切り替え手順と15分上限への備え
切り替えはruns-onのラベルを差し替えるだけです。実務では、ワークフロー全体を移さず、軽いジョブだけを分けてubuntu-slimに載せます。次の例は既存ワークフローのjobs部分の断片で、リポジトリに.nvmrc、package.jsonと整合するpackage-lock.json、package.jsonのlint・testスクリプトがあり、テストがlocalhost:5432のPostgreSQLへ接続する前提です。
jobs:
lint:
runs-on: ubuntu-slim
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version-file: .nvmrc
cache: npm
- run: npm ci
- run: npm run lint
test:
needs: lint
runs-on: ubuntu-24.04
services:
postgres:
image: postgres:18
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version-file: .nvmrc
cache: npm
- run: npm ci
- run: npm test
timeout-minutes: 10は、ふだんより大幅に遅くなったジョブを15分の上限より前に止める設定です。公式に上限を延ばす設定は案内されていません。止まったときはステップごとの所要時間を見て、依存の展開やキャッシュの復元に時間を取られていないかを確認します。1コアで遅くなりやすい箇所なので、移行前後でnpm ciとキャッシュ復元の秒数を比べてください。
よくある質問
ubuntu-slimでDockerは使えますか?
イメージのビルドやコンテナの起動には使えません。Dockerデーモンが無いためです。docker loginやdocker buildx imagetoolsのようにレジストリとだけ通信する操作は、デーモン無しの環境で動くことを実測で確かめています。外部のBuildKitへ接続すればビルドも可能ですが、別途BuildKitの用意が必要です。
Docker公式のubuntuにslimイメージはありますか?
ありません。公式のubuntuリポジトリにslimという名前のタグは無く、ubuntu-slimはGitHub Actionsのランナーラベルです。軽いベースイメージにはubuntu:24.04かdebian:trixie-slimが使えます。
ubuntu-latestは今どのUbuntuを指していますか?
2026年11月8日時点は24.04から26.04への切り替え中で、11月19日に完了する予定です。移行期間中は実行ごとにどちらが割り当てられるかが変わりえるので、版を固定したいジョブはubuntu-24.04またはubuntu-26.04を指定してください。
ubuntu-slimのジョブが15分を超えるとどうなりますか?
ジョブは打ち切られ、失敗として扱われます。公式リファレンスに「The job timeout for single-CPU runners is 15 minutes」とあります。15分に近いジョブは通常のランナーに戻してください。
ubuntu-slimはパブリックリポジトリでも無料ですか?
無料です。標準のGitHubホストランナーはパブリックリポジトリで無料で、ubuntu-slimも標準ランナーに含まれます。プライベートリポジトリではプランの利用枠を消費し、超えた分は1分0.002ドルで課金されます。