はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

DockerでExited(139)が出たときの対処

DockerでExited(139)が出たときの対処

doker runしたときにコンテナが立ち上がらずExited(139)で終了してしまうときの対処メモ。

この終了コードはDocker Desktop上でも確認できる。

f:id:cartman0:20220307003209p:plain
Exited(139)

環境・事前準備

  • Windows10 64bit
    • WSL2
    • DockerDesktop 4.5.1 (74721)

対処方法

wsl2側で立ち上げているOS側の問題なのでWSL2の設定を変更する.

  1. windows側のエディタで`%PROFILE%\.wslconfig`ファイルを開く。なければテキストファイルとして作る。
  2. 次の設定を追加。
    
    [wsl2]
    kernelCommandLine = vsyscall=emulate
    
  3. PCを再起動
  4. 設定変更が適用されたかの確認
    
    > wsl cat /proc/cmdline
    initrd=\initrd.img panic=-1 pty.legacy_count=0 nr_cpus=12 vsyscall=emulate
    
    f:id:cartman0:20220307003205p:plain
    `vsyscall=emulate`を確認

ここまでできてればdocker runでコンテナを立ち上げできる.

原因

CentOSなどの古いOSではvsyscallが使われる場合がある。しかしWSL2ではデフォではOFFなのでDocker側で使おうとすると立ち上がらずexitedしてしまう、らしい。

github.com

emulateするように設定すれば問題なくなる。