GitHub

GitHub Actionsのubuntu-slimとは|1コア5GB・15分上限とDockerが動かない条件

GitHub Actionsのubuntu-slimとは|1コア5GB・15分上限とDockerが動かない条件

ubuntu-slimは、GitHub Actionsのジョブを1コア・メモリ5GBのコンテナで動かす軽量ランナーです。2025年10月28日に公開プレビューとして登場し、2026年1月22日に一般提供へ移行しました。分単価は0.002ドルで、プライベートリポジトリのubuntu-latest(0.006ドル)の3分の1です。

安さの代わりに、ジョブは15分で打ち切られ、Dockerデーモンも入っていません。この記事では2026年9月時点の公式ドキュメントとrunner-imagesリポジトリを一次情報に、仕様の違い、Dockerで動かなくなる処理、足りないツール、移すジョブの選び方を順に整理します。

まとめ:ubuntu-slimへ移す前に確認する5つの条件

  • ubuntu-slimは1コア・メモリ5GB・ストレージ14GBのx64コンテナで、OSはUbuntu 24.04です。arm64版はありません。
  • ジョブは15分に達すると打ち切られて失敗します。ふだん10分を超えるジョブは移さないでください。
  • Docker CLIは入っていますが、デーモンは入っていません。container:、services:、Dockerコンテナアクションを使うジョブは動きません。
  • Java・Ruby・Rust・ブラウザ・kubectlなどはubuntu-24.04にあってubuntu-slimにはありません。セットアップの時間も15分に含まれます。
  • 向いているのはラベル付け、lint、API呼び出し、短いスクリプトです。課金はジョブごとに分単位へ切り上げた時間×単価なので、移行前後の課金分数で費用を比べてください。

ubuntu-slimとubuntu-latestの仕様比較(2026年9月時点)

GitHubホストランナーのリファレンスでは、ubuntu-slimのスペックはパブリックとプライベートで変わりません。一方でubuntu-latestは、パブリックリポジトリだと4コア・16GBに増えます。

項目 ubuntu-slim ubuntu-latest(プライベート) ubuntu-latest(パブリック)
CPU 1 2 4
メモリ 5GB 8GB 16GB
ストレージ 14GB 14GB 14GB
実行形態 コンテナ(非特権) VM VM
ジョブの上限 15分 6時間 6時間
アーキテクチャ x64のみ x64(arm64は別ラベル) x64(arm64は別ラベル)
OS Ubuntu 24.04.4 LTS Ubuntu 24.04 Ubuntu 24.04
分単価 0.002ドル 0.006ドル 無料

ubuntu-slimのOSとイメージ版は、runner-imagesのubuntu-slim-Readme.mdに載っている値です(Image Version 20260728.2.1)。ベースはFROM ubuntu:24.04のDockerfileで、各ジョブは公式ドキュメントのいう「hypervisor level 2 isolation」で隔離されたコンテナとして起動し、ジョブが終わると破棄されます。

arm64版はまだありません。runner-imagesには2026年7月24日に「No Arm version avaiable for ubuntu-slim」というissue(#14446)が立っていて、9月時点でも未解決です。x64とarm64の両方でビルドするワークフローは、arm64側をubuntu-24.04-armに残すことになります。ラベルの記法と-latestの切り替わりはGitHub Actionsのruns-onで扱っています。

分単価は2026年1月1日の価格改定後の値です。改定前はubuntu-latestが0.008ドルだったため、プレビュー期の記事には「4分の1」と書かれているものがありますが、現在は3分の1です。無料枠の減り方とプラン別の枠はGitHub Actionsの料金で計算例付きで解説しています。

ubuntu-slimでDockerが動かない処理と使える操作

ubuntu-slimにはDockerのコマンドは入っていますが、コンテナを起動するデーモンは入っていません。ubuntu-slimのイメージ一覧にはDocker Client 29.6.2、Docker Compose、Docker Buildxが並ぶ一方、ubuntu-24.04にあるDocker Serverがありません。

Docker CLIだけが入りデーモンが無い構成

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に残っています。

ubuntu-slimで動かないcontainer・services・Dockerコンテナアクション

次の3つは、どれもランナー側のDockerデーモンを前提にしています。GitHubのサービスコンテナのドキュメントも「Docker container actions, job containers, or service containers」を使うならLinuxランナーが必要だと、この3つを並べています。

  • jobs.<job_id>.containerでジョブ全体をコンテナ内で実行する書き方
  • services:でPostgreSQLやRedisを横に立てる結合テスト
  • runs.using: dockerで作られたアクション(Dockerfileやイメージを指定するもの)

3つ目は見落としやすい部分です。ワークフロー側にdockerの文字が無くても、使っているアクションがDockerコンテナアクションなら、ジョブ開始時のdocker pullで止まります。issue #13583で報告されたエラーは次のとおりです。

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

container:をubuntu-slimでも使えるようにしてほしいという要望(#13541)には、メンテナーが「Ubuntu Slimのエージェントは既にコンテナであり、Docker-in-Dockerを支える保守負担が見合うか疑問」と回答しています。今後対応される前提で設計しないほうが安全です。DBを立てるテストはGitHub Actionsのサービスコンテナ(services)の手順どおりubuntu-latestで動かし、イメージのビルドもGitHub ActionsでDockerイメージをビルドするの構成のまま残してください。

Docker CLIで残る用途

それでもCLIが入っているのは、デーモンを使わずにレジストリへ直接問い合わせる操作のためです。Docker CLIの追加を求めたissue #13464は、その用途にdocker manifest inspectを挙げていました。2026年1月16日にマージされたPR #13511でDocker CLIが追加され、このissueは閉じられています。

jobs:
  check-tag:
    runs-on: ubuntu-slim
    timeout-minutes: 5
    steps:
      - name: 公開済みタグの存在確認
        run: docker manifest inspect ghcr.io/example/app:1.4.0 > /dev/null

デーモンが無くてもこのコマンドが動くことは、手元でも再現できます。2026年9月14日に、Docker CLI 29.8.0の静的バイナリ(macOS版)でDOCKER_HOSTを存在しないソケットに向けて実行した結果です。

$ export DOCKER_HOST=unix:///tmp/nonexistent.sock
$ docker manifest inspect ubuntu:24.04 | head -3
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.oci.image.index.v1+json",
$ docker manifest inspect ubuntu:does-not-exist-tag; echo "exit=$?"
no such manifest: docker.io/library/ubuntu:does-not-exist-tag
exit=1
$ docker pull ubuntu:24.04
failed to connect to the docker API at unix:///tmp/nonexistent.sock; check if the path is correct and if the daemon is running: dial unix /tmp/nonexistent.sock: connect: no such file or directory

docker manifest inspectはデーモンにつながらなくてもレジストリからマニフェスト一覧を取得でき、docker pullだけがissue #13583と同じエラーで止まります。上のワークフロー例は、この性質を使ってタグを取得できるかを確かめるものです。ただし終了コードが0以外になる原因はタグが無い場合に限らず、認証エラーやレジストリとの通信障害でも失敗します。ジョブが落ちたら、ログのメッセージで原因を見分けてください。

タグの存在確認やマルチアーキのマニフェスト確認のように、イメージを取得も実行もしない処理ならubuntu-slimに寄せられます。

Docker HubのUbuntu公式イメージとslimタグの有無

ubuntu-slimはGitHub Actionsのランナーラベルで、Dockerイメージのタグ名ではありません。Docker Hubの公式ubuntuリポジトリをタグ名「slim」で検索すると、2026年9月14日時点のAPI応答で0件でした。slimという名前のタグを持つのはdebian:trixie-slimなどDebian側です。

同じAPIでamd64の圧縮サイズを比べると、ubuntu:24.04が29,763,253バイト、debian:trixie-slimが29,792,658バイトで、ほぼ同じでした。Ubuntuベースのまま軽いイメージを使いたい場合も、まずubuntu:24.04をそのまま試せば足ります。なおubuntu:26.04は41,603,097バイトで、24.04より約4割大きくなっています。

ubuntu-slimに入っていないツールと追加時の注意

ubuntu-slimのイメージに入っている言語ランタイムは、Node.js 24、Python 3.12、Perlです。ほかにGit、GitHub CLI、AWS CLI、Azure CLI、Google Cloud CLI、PowerShell、jq、yqが入っています。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、各WebDriver
データベース MySQL、PostgreSQL
IaC Pulumi、Packer、Ansible

足りないものはactions/setup-javaなどのsetup系アクションかapt-getで入れられます。ただしダウンロードとインストールの時間も15分の上限に含まれます。セットアップだけで数分かかる言語をubuntu-slimで使うと、本体の処理に使える時間が削られます。

setup系アクションの挙動が通常ランナーと違う例も報告されています。issue #13671では、setup-nodeにnode-version: 24を指定すると、ubuntu-latestではキャッシュ済みの版が使われる一方、ubuntu-slimでは新しい版をダウンロードしていました(2026年2月起票、9月時点で未解決)。移行後の初回実行では、ステップごとの所要時間を必ず見てください。

aptにも注意点があります。プレビュー期に「パッケージリストが空でapt-get updateを先に実行しないとインストールできない」という指摘(#13426)があり、修正のPR #13511が2026年1月16日にマージされました。ところがこのissueは2月3日に再オープンされ、5月7日にも同じ失敗の報告が続いています。ubuntu-slimでapt-get installを使うときは、直前にsudo apt-get updateを必ず入れてください。

ubuntu-slimに移すジョブと移さないジョブの判断

一般提供のお知らせでGitHubが例示した用途は、issueの自動ラベル付け、webpackのような基本的なビルド、lintとフォーマット、外部ツールへのAPI呼び出し、簡単なPythonスクリプトの5つです。「一般的な重いCI/CDビルド以外」の自動化、issue操作、短いジョブ向けと位置付けています。

移さないほうがよいのは、次の条件に1つでも当てはまるジョブです。

  • 現在の所要時間が10分を超える(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」とあり、1分未満はジョブ単位で切り上げられます。たとえば2コアで50秒(課金1分・0.006ドル)のジョブがubuntu-slimで2分10秒(課金3分・0.006ドル)になると、単価が3分の1でも費用は同じです。逆に10秒のジョブが40秒に伸びる程度なら、どちらも課金1分なのでubuntu-slimのほうが安く済みます。移す前に、今のジョブの所要時間を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で絞っています。

ubuntu-slimへの切り替え手順と15分上限への備え

切り替え自体はruns-onのラベルを差し替えるだけです。実務では、ワークフロー全体を移すのではなく、軽いジョブだけを分けてubuntu-slimに載せる形になります。次の例は既存ワークフローに組み込むjobs部分の断片で、リポジトリに.nvmrcと、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-latest
    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

lintはubuntu-slimに、PostgreSQLをサービスコンテナで立てるテストはubuntu-latestに残しています。optionsのpg_isreadyは、PostgreSQLが接続を受け付けるまでサービスを正常と見なさないヘルスチェックです。timeout-minutes: 10は、ふだんより大幅に遅くなったジョブを15分の上限より前に止める設定です。止まったときは、ジョブログに出るステップごとの所要時間から、どのステップで時間を使ったかを確認します。

依存パッケージの展開やキャッシュの復元は、1コアになると遅くなる場合があります(通信やディスクの条件にも左右されます)。移行前後でnpm ciやキャッシュ復元のステップの所要時間を比べ、毎回同じ依存を入れるジョブはキャッシュを効かせてから移すと上限に近づきにくくなります。キャッシュのキー設計はGitHub Actionsのキャッシュを参照してください。

よくある質問

ubuntu-slimでDockerイメージを使ったジョブは実行できますか?

実行できません。ubuntu-slimにはDocker CLIしか入っておらずデーモンが無いため、container:、services:、Dockerコンテナアクションはどれも動きません。docker manifest inspectのようにレジストリへ問い合わせるだけの操作なら使えます。

ubuntu-slimのジョブが15分を超えるとどうなりますか?

ジョブは打ち切られ、失敗として扱われます。公式リファレンスに「The job timeout for single-CPU runners is 15 minutes」とあり、延長の設定は案内されていません。15分に近いジョブはubuntu-latestに戻してください。

ubuntu-slimはまだプレビュー版ですか?

2026年1月22日にGitHubの変更履歴で一般提供(GA)が告知されています。当時runner-imagesのREADMEにプレビューの表示が残っていたため、コミュニティで確認を求めるディスカッションも立ちました。9月時点のREADMEではプレビュー表示のない通常の行として載っています。

ubuntu-slimはパブリックリポジトリでも無料ですか?

無料です。GitHubの課金ドキュメントは、パブリックリポジトリでの標準GitHubホストランナーの利用を無料としており、ubuntu-slimも標準ランナーの一覧に含まれています。プライベートリポジトリでは各プランの無料枠を使い、超えた分が1分0.002ドルで課金されます。

ubuntu-latestは現在どのUbuntuのバージョンを指していますか?

2026年9月時点ではUbuntu 24.04です。Ubuntu 26.04はubuntu-26.04ラベルでパブリックプレビュー中で、ubuntu-slimのベースも24.04のままです。runner-imagesでは、Ubuntu 22.04ベースのイメージを9月17日から非推奨にし、翌年4月17日にサポートを終えると告知しています。

関連記事

お気に入りに入れた記事の一覧

資料請求

RELATED POSTS 関連記事

目次