Dockerのubuntuにopenssh-server入れたらsystemctlできた(がsnapdが動かない?)

タイトルで落ちてる

docker run時のオプション指定に--privileged、プロセス指定に/sbin/initとすることも必要。

追記 2021.06.28

コンテナでvm寄りのことをしたいなら、LXDが便利です。おすすめ。
簡単な解説記事書いてますのでどうぞー

yassi.hatenablog.com


追記 2021.03.30
snapdが動かない。

root@cf10f188a61e:/# apt update && apt upgrade -y && apt install -y snapd
root@cf10f188a61e:/# systemctl start snapd
root@cf10f188a61e:/# systemctl status snapd
● snapd.service - Snap Daemon
     Loaded: loaded (/lib/systemd/system/snapd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-03-30 12:36:13 UTC; 2s ago
TriggeredBy: ● snapd.socket
   Main PID: 1111 (snapd)
      Tasks: 10 (limit: 4585)
     Memory: 16.6M
     CGroup: /docker/cf10f188a61ef15c9cc1a860c7fa3056c92aeb57f22f753698c307d4803d6b55/system.slice/snapd.service
             └─1111 /usr/lib/snapd/snapd

Mar 30 12:36:13 cf10f188a61e systemd[1]: Starting Snap Daemon...
Mar 30 12:36:13 cf10f188a61e snapd[1111]: AppArmor status: apparmor is enabled and all features are available
Mar 30 12:36:13 cf10f188a61e snapd[1111]: daemon.go:347: started snapd/2.48.3+20.04 (series 16; classic) ubuntu/20.04 (>
Mar 30 12:36:13 cf10f188a61e snapd[1111]: daemon.go:440: adjusting startup timeout by 30s (pessimistic estimate of 30s >
Mar 30 12:36:13 cf10f188a61e snapd[1111]: backend.go:134: snapd enabled root filesystem on overlay support, additional >
Mar 30 12:36:13 cf10f188a61e snapd[1111]: helpers.go:105: error trying to compare the snap system key: system-key missi>
Mar 30 12:36:13 cf10f188a61e systemd[1]: Started Snap Daemon.

root@cf10f188a61e:/# sudo snap install core; sudo snap refresh core
error: cannot perform the following tasks:
- Setup snap "core" (10908) security profiles (cannot reload udev rules: exit status 1
udev output:
Failed to send reload request: No such file or directory
)
snap "core" is not installed

やっぱり、コンテナをVM代わりにするのは無理があるのか…?
仕方ないのでDockerでなく大人しくVMを使うとするか……

追記終わり


ことの経緯

ansible のテスト環境をDockerで構築できたら便利なのになー、でもVMじゃないからWSLみたいにsystemctlできないのでは??

検索してこの記事が出てくる

qiita.com

あー、やっぱだめなんだ。。検索結果みる限り、CentOSではできるっぽい?うーん。。。

記事の最後にあったsupervisorを調べてみるか。

うーむ、supervisorではだめだな。ansibleのテストをするのにsystemdが使えないのは言語道断だ。
とりあえず、このページを参考に、dockerの練習としてコンテナを作成してみる。(docker初体験故)

docs.docker.jp

supervisorは入れたらめんどくさそうなので、それ以外のパッケージだけ入れる。

コンテナつくれた。こんなんなのかすげー

…でもマジでsystemctl動かないのか、どれどれ、確かCentOSではこういう風にしなきゃだっけ…

$ docker run -itd --privileged <imageID> /sbin/init
$ docker exec -it <コンテナID>
# systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-03-29 20:19:48 UTC; 1min 58s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 41 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 45 (sshd)
      Tasks: 1 (limit: 4585)
     Memory: 1.5M
     CGroup: /docker/955ad934203feab908973ded3b82ab7859f294a53cb727abd3000b1ed285d22f/system.slice/ssh.service
             └─45 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

う、動いたーーー!?!?

じゃあ素のubuntuでは……できない。

何が要因なのか調査

シンプルなDockerfileを書いてちまちまimageを作成、systemctlできるようになる要因を探る。

で、動作確認が取れたのがこの構成

FROM ubuntu:20.04

RUN apt update && apt install -y openssh-server
RUM mkdir -p /var/run/sshd

ENTRYPOINT ["/sbin/init"]

あらかじめサービスをインストールすることで使えるようになる…?

試しにssh-serverの代わりにnginxにして作成→だめ 今度はsambaにして作成→だめ

…なんなのか。

まあ、ansibleのテスト環境は作れそうなのでとりあえずヨシ!