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をベースにするほうがよい。
コメント