今更だけど、良く忘れるので。
普通にコンテナを作って、その中で systemctl
を実行すると以下の様に怒られる。
$ Failed to get D-Bus connection: Operation not permitted
そんなときは --privileged
で起動すればよい。
$ docker run --privileged -itd --name https-test -p 8443:443 local/el72 /sbin/init
$ docker exec -it https-test bash
/sbin/init
で起動してから exec
で bash
を呼び出すのがミソ。 attach
や -d
を付けずにフォアグランドで起動しても何も出来ない。(当然と言えば当然)
Docker のデザイン前提で考えれば 1コンテナ = 1プロセスなので、このやり方がスマートでないことは明白なんだけど、色々なサービスが絡まる検証をしたいときはこの方法が最も手軽。(もちろんプロダクションで使おうなどとは考えていない)
vagrant
や kvm
でも良いんだけど、使い捨てを短期間の内に何度ども何度ども行うときはこれが一番楽である。ちなみに docker build
は --privileged
出来ないし、当分出来るようにしないと思われる。
また、Atomic Host の atomic run
でも同じ事が出来ると思われるが、こっちの場合 pid
や /run
も共有されるのでちょっと用途と合わない事が多い感じ。
なお、何故か RHEL/CentOS7.2 ( kernel-3.10.0-327.4.5.el7.x86_64
/ docker-1.8.2-10.el7.x86_64
) だとこれで起動した後 docker stop
が効かない・・・。詳しくは見てないけど、Fedora23 ( kernel-4.3.5-300.fc23.x86_64
/ docker-1.9.1-6.git6ec29ef.fc23.x86_64
) だと上手く止められるので、kernel か docker か、それとも systemd か、その辺なのだろう。(さらっとログを見た感じ SELinux は関係なさそう)
あまり意図した使われ方でないハズなので、黙って Fedora でやることにする。