0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apple シリコンで Arch Linux の docker ビルドすると pacman の seccomp エラーで失敗する問題の解決策

0
Last updated at Posted at 2026-02-27

問題の内容

Arch Linux の docker image の CPU アーキテクチャは AMD64 のみで ARM がない.

Apple シリコン上の Docker Desktop でも, AMD64 を指定してビルドすれば以前はできていたが,
いつからか pacman でエラーが発生するようになった.

Dockerfile
FROM archlinux

RUN pacman -Syu --noconfirm --needed make clang gtest \
  && pacman -Scc --noconfirm \
  && rm -rf /var/cache/pacman/pkg/*
docker image build 時に pacman でエラー
$ docker image build . --platform linux/amd64 -t skkzsh/gtest
...
 => ERROR [2/2] RUN pacman -Syu --noconfirm --needed make clang gtest   && pacman -Scc --noconfirm   && rm -rf /var/cache/pacman/pkg/*                                                                         0.2s
------
 > [2/2] RUN pacman -Syu --noconfirm --needed make clang gtest   && pacman -Scc --noconfirm   && rm -rf /var/cache/pacman/pkg/*:
0.190 :: Synchronizing package databases...
0.197 error: error restricting syscalls via seccomp: 22!
0.197 error: switching to sandbox user 'alpm' failed!
0.197 error: failed to synchronize all databases (failed to retrieve some files)
------
Dockerfile:3
--------------------
   2 |
   3 | >>> RUN pacman -Syu --noconfirm --needed make clang gtest \
   4 | >>>   && pacman -Scc --noconfirm \
   5 | >>>   && rm -rf /var/cache/pacman/pkg/*
   6 |
--------------------
ERROR: failed to build: failed to solve: process "/bin/sh -c pacman -Syu --noconfirm --needed make clang gtest   && pacman -Scc --noconfirm   && rm -rf /var/cache/pacman/pkg/*" did not complete successfully: exit code: 1

解決策

pacman に --disable-sandbox-syscalls オプションを付けると解消した.

Dockerfile
FROM archlinux

- RUN pacman -Syu --noconfirm --needed make clang gtest \
+ RUN pacman -Syu --noconfirm --needed --disable-sandbox-syscalls make clang gtest \
  && pacman -Scc --noconfirm \
  && rm -rf /var/cache/pacman/pkg/*

--disable-sandbox-syscalls オプション

pacman のマニュアルページには以下 3 つの sandbox 無効化オプションの説明あり.

オプション 無効化される機能
--disable-sandbox-syscalls seccomp による syscall フィルタリングのみ
--disable-sandbox-filesystem Landlock によるファイルシステム制限のみ
--disable-sandbox 上記両方(完全無効化)

今回の問題は seccomp のみが原因のため, --disable-sandbox-syscalls を使うことにより, ファイルシステム制限の方は引き続き有効に保てる.

原因

そもそも seccomp, alpm ってなんやねん状態のため, 興味本位で少し調べてみた簡単メモ.

pacman のサンドボックス機能

pacman はバージョン 7.0 以降, パッケージのダウンロード処理にサンドボックスを導入している.
ダウンロード処理を専用のシステムユーザー alpm に切り替えて実行し,
以下の 2 つの仕組みで制限をかける (seccomp フィルタリングは 7.1 で 2025/11 ごろに追加).

  • seccomp (システムコールのサンドボックス): ダウンロードプロセスが呼び出せるシステムコールを BPF フィルタで制限する Linuxカーネルのセキュリティ機能
  • Landlock (ファイルシステムのサンドボックス): ダウンロードプロセスがアクセスできるファイルシステムのパスを制限する Linux カーネルのセキュリティ機能

QEMU エミュレーション環境での発生原因

Apple シリコン上で AMD64 の Docker コンテナを動かすには, QEMU による CPU エミュレーションが必要.
実カーネルは ARM であるため, AMD64 向けに seccomp フィルタを設定できず, EINVAL (Invalid Argument) でエラーコード 22 が返る.
(らしい.)

確認環境

ソフトウェア バージョン
pacman 7.1.0
Docker Desktop for Mac 4.62.0
macOS Sequoia 15.7.4
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?