dockerのubuntuイメージでsystemctlを動かす
本来やるべきではないのですが、せっかくやったのでとりあえず残しておきます。
自前のサービスをDockerで動かすときの書き方
/etc/systemd/hoge.service を作成したあと
# systemctl enable hoge # systemctl daemon-reload # systemctl start hoge
という手順でサービスを動かす。
dockerの場合、色々と制限がかかっているため、そのままではsystemctlが動きません。
それを取り除く必要があります。 ちょうどSELinuxをdisableにするような感じになります。
docker run のときに --privileged オプションをつけて /sbin/init を実行することで制限が外れ/sbin/initが動くようになり、systemctlを実行できるようになります。
ほぼすべての制限を外してしまうので、部分的に制限を外したい場合は--device=/dev/xxx を使うほうが良いです。
$ docker run --rm --privileged -it -name hoge hogehoge:latest /sbin/init ## これと別に $ docker exec -it hoge bash 入ったコンテナ# systemctl start service
と言うように実行するか、 ENTRYPOINTで /sbin/init && systemctl start service を実行できるようなシェルを起動させる
FROM ubuntu COPY hoge.service /etc/systemd/ RUN systemctl enable hoge COPY entrypoint.sh /usr/bin ENTRYPOINT ["/usr/bin/entrypoint.sh"]
#!/bin/bash exec /sbin/init systemctl daemon-reload systemctl start hoge