LoginSignup
11
8

【M1 Mac】Dockerのコンテナを立ち上げるとruntime: failed to create new OS threadが出る

Last updated at Posted at 2021-09-17

はじめに

M1 Macに乗り換えて開発を進めようとしたら、Intel版 Macなら動いたDockerイメージのコンテナを立ち上げると、以下のエラーが出た

 runtime: failed to create new OS thread (have 2 already; errno=22)
 fatal error: newosproc

解決策

ENTRYKITを使わずにENTRYPOINTを用いて外部コマンドを使うようにする

修正前

Dockerfile

 ENTRYPOINT [ \
  "prehook", "yarn install", "--" \
 ]

修正後

Dockerfile

 ENTRYPOINT ["sh", "./entrypoint.sh" ]

./entrypoint.shを作成して

 #!/bin/bash
 
 yarn install
 
 exec "$@"

解説

Entrykitとは

Entrykit は一言でいうと、コンテナ内のプロセス起動時に便利な軽量 init システムだ。Docker の起動コマンドに Entrykit を使うと、起動時にテンプレートファイルを元に設定ファイルをレンダリングしてくれたり、メインプロセスの前にコマンドを実行できたりする。

だそうです。なるほど。

また、どうやらENTRYPOINTがentrykitの実行部分であること、entrykitにはコマンドが4つあるということがわかった。

コマンド               実行内容
prehook コンテナ起動時にコマンドを実行する
render テンプレート化したファイルに記載されている変数部分を動的に変更する
switch コンテナ起動時に実行できるコマンドを複数用意し
切り替えられるようにする
codep 複数のプロセスを並列実行する

なぜEntrykitはダメなのか

downloadしてくるものはx86_64(amd64)向けのものらしく、M1(arm64)では動かなかった。っぽい

11
8
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
11
8