SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

dockerで古いOSのコンテナが動かない

問題

wslのdockerで、古いOSのコンテナをbuildしようとすると、segmentation fault で中断します。

答え

古いOSはvsyscallが使用される場合があるが、最近のOSではデフォルトでOFFなので、使用できずエラーになるらしい。

Debian 11 だと /etc/default/grub を確認すると、以下のようになっている。

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

古いOSのために /etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT に vsyscall=emulate を追記する。

GRUB_CMDLINE_LINUX_DEFAULT="quiet vsyscall=emulate"

update-grub を実行。

# update-grub

再起動。

reboot

/proc/cmdline を確認すると再起動前はこうなっていた。

# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.10.0-20-amd64 root=UUID=b01236a2-3ab3-4db5-8516-xxxxxxxxxxxx ro console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 quiet

再起動後はこうなった。

# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.10.0-20-amd64 root=UUID=b01236a2-3ab3-4db5-8516-xxxxxxxxxxxx ro console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 quiet vsyscall=emulate

docker build も無事動いた。

ほんとは新しいOSをベースにするほうがよい。

関連するメモ

コメント