1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Yocto Dockerコンテナ構築のトラブルシューティング

1
Last updated at Posted at 2026-07-10

Docker コンテナ内の Yocto ビルドで多い問題は、権限、locale、volume mount、TUN デバイスです。

git clone に sudo が必要

症状

git clone https://git.yoctoproject.org/poky

が失敗し、sudo git clone なら成功する。

原因

/work またはホスト側の workspace/ が root 所有になっています。

確認

コンテナ内で確認します。

whoami
id
ls -ld /work
ls -ld /work/*

ホスト側で確認します。

cd yocto-docker-env
ls -ld docker workspace cache artifacts
ls -l docker/Dockerfile.yocto-build

対処

ホスト側で所有者を戻します。

cd yocto-docker-env
sudo chown -R $(id -u):$(id -g) docker workspace cache artifacts

プロジェクト全体を戻す場合です。

sudo chown -R $(id -u):$(id -g) .

禁止事項

sudo git clone ...
sudo bitbake ...
sudo chmod -R 777 workspace

特に sudo bitbake は避けます。tmp/downloads/sstate-cache/ が root 所有になり、後でさらに壊れます。

Dockerfile.yocto-build が root 所有で編集できない

確認

ls -l docker/Dockerfile.yocto-build

例です。

-rw-r--r-- 1 root root ... docker/Dockerfile.yocto-build

対処

sudo chown $(id -u):$(id -g) docker/Dockerfile.yocto-build

まとめて直す場合です。

sudo chown -R $(id -u):$(id -g) docker workspace cache artifacts

en_US.UTF-8 locale がない

症状

Please make sure locale 'en_US.UTF-8' is available on your system

一時対処

コンテナ内で実行します。

sudo apt-get update
sudo apt-get install -y locales
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

その後、コンテナを入り直します。

exit
cd docker
UID=$(id -u) GID=$(id -g) docker compose run --rm yocto-build

確認します。

locale
locale -a | grep en_US

恒久対処

Dockerfile に以下を入れます。

RUN apt-get update && apt-get install -y --no-install-recommends locales \
    && sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \
    && locale-gen en_US.UTF-8 \
    && update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8

その後、再ビルドします。

cd docker
UID=$(id -u) GID=$(id -g) docker compose build --no-cache

UID/GID が合っていない

症状

コンテナ内で作ったファイルがホスト側で編集できない、または逆にコンテナ内で /work に書けない。

対処

ビルド・起動時に UID/GID を渡します。

UID=$(id -u) GID=$(id -g) docker compose build
UID=$(id -u) GID=$(id -g) docker compose run --rm yocto-build

docker-compose.yml 側は以下にします。

args:
  USER_UID: ${UID:-1000}
  USER_GID: ${GID:-1000}

Docker 内で QEMU の TUN が使えない

症状

runqemu - ERROR - TUN control device /dev/net/tun is unavailable

推奨対処

QEMU のユーザーモードネットワーク slirp を使います。

runqemu nographic slirp \
  tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs.qemuboot.conf

TUN を使う場合

ホスト側で確認します。

ls -l /dev/net/tun
sudo modprobe tun

docker-compose.yml に追加します。

devices:
  - /dev/net/tun:/dev/net/tun
cap_add:
  - NET_ADMIN

Windows / WSL2 で遅い

Yocto は小ファイル I/O が多いため、Windows の /mnt/c/... 上でビルドすると遅くなりやすいです。

推奨です。

WSL2 の ext4 領域: ~/yocto-docker-env

避けます。

/mnt/c/Users/.../yocto-docker-env
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?