Dockerのubuntuにopenssh-server入れたらsystemctlできた(がsnapdが動かない?)
タイトルで落ちてる
docker run
時のオプション指定に--privileged
、プロセス指定に/sbin/init
とすることも必要。
追記 2021.06.28
コンテナでvm寄りのことをしたいなら、LXDが便利です。おすすめ。
簡単な解説記事書いてますのでどうぞー
追記 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できないのでは??
↓
検索してこの記事が出てくる
あー、やっぱだめなんだ。。検索結果みる限り、CentOSではできるっぽい?うーん。。。
記事の最後にあったsupervisorを調べてみるか。
↓
うーむ、supervisorではだめだな。ansibleのテストをするのにsystemdが使えないのは言語道断だ。
とりあえず、このページを参考に、dockerの練習としてコンテナを作成してみる。(docker初体験故)
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のテスト環境は作れそうなのでとりあえずヨシ!