Dockerコンテナでsystemctlコマンドを実行できるようにする

docker
スポンサーリンク

環境

  • Docker:Docker version 25.0.3, build 4debf41
  • Dockerホスト:NAME=”Ubuntu” VERSION_ID=”22.04″
  • Dockerコンテナ:Rocky Linux9.3
  • docker-compose を使用

事象

Dockerコンテナでsystemdコマンドを実行しようとしたら以下のMSGが出力され、実行できない。

ERROR: for server-hogehoge  Cannot start service db: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec:     "/sbin/init": stat /sbin/init: no such file or directory: unknown

ERROR: for db  Cannot start service db: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/sbin/init"    : stat /sbin/init: no such file or directory: unknown ERROR: Encountered errors while bringing up the project.

原因

Dockerコンテナに、/sbin/initが存在しない。

対処

docker-compose.ymlの該当サービス内(今回の例でいくと、server-hogehoge)に、以下2つの記述を追記する。

    privileged: true
    command: /sbin/init

dockerコンテナを再起動してみる(downまで実行)
downはコンテナを指定して実行)

docker-compose rm -fsv server-hogehoge && docker-compose up -d

怒られる。

まだ/sbin/initが存在していない模様。

現在のコンテナの状態からdockerのイメージを作成し、
docker-compose.yml のimage: にてその作成したイメージを指定。

    privileged: true
    command: /sbin/init

の記述は記述されたままの状態で、
再度 dockerコンテナを再起動してみる(downまで実行)
downはコンテナを指定して実行)

docker-compose rm -fsv server-hogehoge && docker-compose up -d

起動できた。

なぜこれで起動できたのか、追えていないが、今回はそこは不要なので追わない。

今後同じことが起きたら同じ手順を踏んでみることにする。

つまり、

  1. docker commit
  2. privileged true を指定 + /sbin/init を指定
  3. docker-composeでdownまでやる再起動

コメント