0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker上のCentOSだと自作systemdが動かない時の対応方法

Last updated at Posted at 2020-11-30

#どういう状況だってばよ!?

  1. CentOSで定期実行を実現する為にsystemdを自作したい。
  2. 実機のCentOSだと自作systemdが動くのに、Docker上のCentOSだとなぜかダメ。
  3. 具体的にはDocker上だと下記のエラーでこける。

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

#あたいはこんな環境でやってます
この記事は下図のようにWindows10のDocker Desktopをインストール済で、Docker-composeももれなくセットでインストールされている前提になります。
image.png

#まずはdocker-compose.ymlを新規作成
どこかのフォルダにdocker-compose.ymlという設定ファイルがある訳ではないです。
また、docker-compose.ymlを置く場所はひとまずどこでもよかとです。

Docker初心者なので『docker-compose.ymlって設定ファイルどこにあるの…?どこに置かなきゃいけないの…?』なんて右往左往してました…(´・ω・`)

docker-compose.yml ≒ コンテナ作成手順書(指示書) って捉えるといいかな~って思います。

んで、今回は『C:\Users\waokitsune\centos8_systemd_test』というフォルダにdocker-compose.ymlを作成してみました。

#docker-compose.ymlの中身
参考サイトさん を参照させてもらいました。
(centosという名前のイメージは既にある前提のymlになります)

version: "3.8"
services:
  centos8_systemd_test:
    image: centos
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
    cap_add:
      - SYS_ADMIN
    command: /sbin/init

#PowerShellでDocker-composeにymlを食わせる
PowerShellを起動してまずはdocker-composeが置いてある場所へ行き…

cd C:\Users\waokitsune\centos8_systemd_test

docker-composeコマンドでコンテナ作成。

docker-compose up -d

成功するとこんな感じ。
image.png

#ymlを食わせて出来たコンテナを使うぞい
Docker Desktopのダッシュボード開いて、端末起動!
ああ…なんか頭痛が痛いみたいなコンテナ名になっちゃってますね…(´・ω・`)
image.png

まずは ps aux でプロセスを見てみましょい。
なんか行けそうな気がします。

image.png

ちなみに自作systemdが動かなかったコンテナの ps aux 結果はこちら。
image.png

テキストファイルを作成するシェルスクリプトファイル『zoi.sh』をルート直下に作成します。

zoi.sh
#!/usr/bin/bash
touch /zoizoi.txt

作ったシェルスクリプトファイルに実行権限を与えてあげます。

chmod 755 /zoi.sh

そして、『/etc/systemd/system』フォルダーに『zoi.service』ファイルを作成します。
作ったシェルスクリプトをキックするだけの簡単なやつです。

zoi.service
[Unit]
Description=kyoumoitinitigannbaruzoi

[Service]
Type=simple
ExecStart=/zoi.sh

[Install]
WantedBy=multi-user.target

準備ができたので『zoi.service』を起動してみます。

systemctl start zoi.service

エラー無く終了したっぽいです。
image.png
本当か?本当にそうかぁ~?
systemctl status zoi.service で確認。
image.png
白丸なので正常終了っぽいです。
(シェルスクリプトに実行権限与え忘れてサービス起動した痕跡があるのはモアイ教ご愛敬)

ls / でも確認。
image.png
シェルスクリプトによってテキストファイルが作成されてます。

OKっす。

無事、Docker上のCentOSで自作systemdを動かせました。

#蛇足
docker-compose.ymlがあると『まったく同じ環境をまた作る』が簡単にできて便利だと思いました。

#参考サイトさん
https://futureys.tokyo/lets-run-the-web-application-for-development-by-docker-desktop-and-access-it-by-browser/

#バージョン
Windows10 Pro バージョン1909 OSビルド19042.630
Docker Desktop:2.5.0.1(49550) Engine:19.03.13 Compose:1.27.4
PSVersion 5.1.19041.610
CentOS Linux release 8.2.2004 (Core)

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?