システムの起動時にスクリプトを実行したいのですが、何度も試行し、複数のチュートリアルとドキュメントに従った後でも、実行できません。
私が何を間違っているのかわかりますか?
docker で Ubuntu 20.04 を実行します。
docker run -d --name daemon ubuntu:20.04 tail -f /dev/null
接続します:
docker exec -it daemon /bin/bash
書く/etc/init.d/test
:
#!/bin/bash
### BEGIN INIT INFO
# Provides: Join the Swarm
# Default-Start: 4
# Default-Stop: 0 6
# Description: Join the Swarm
### END INIT INFO
start(){
/usr/bin/echo start >> /var/log/test.log
}
stop(){
/usr/bin/echo stop >> /var/log/test.log
}
case "$1" in
start)
start;;
stop)
stop;;
status)
cat /var/log/test.log;;
restart)
stop;
start;
;;
*);;
esac
exit 0;
権限を設定し、サービスを有効にします。
chmod 755 /etc/init.d/test
update-rc.d test defaults 91
update-rc.d test enable
実際に動作するか確認します:
service test restart
service test status
次のように出力されるはずです:
stop
start
ログ ファイルを削除してセッションを終了します。
rm -rf /var/log/test.log
exit
コンテナを再起動して再度接続します。
docker restart daemon
docker exec -it daemon /bin/bash
サービスが実際にアクティブであることを確認します。
service --status-all
残念ながら、実行されませんでした:
root@407a8e2c90ee:/# service test status
cat: /var/log/test.log: No such file or directory
RC は問題ないようです:
root@407a8e2c90ee:/# ls /etc/rc*.d
/etc/rc0.d:
K01test
/etc/rc1.d:
/etc/rc2.d:
/etc/rc3.d:
/etc/rc4.d:
S01test
/etc/rc5.d:
/etc/rc6.d:
K01test
/etc/rcS.d:
S01procps
答え1
あなたの質問から私が理解したのは、ubuntu:20.04 コンテナを起動し、このコンテナ内で追加のサービスを起動する必要があるということです。
- コンテナ サポーター ファミリーにあなたを迎えることができて嬉しいです。
- あなたが説明している問題は Ubuntu に関連するものではなく、コンテナのデフォルトの動作です。
- コンテナを起動すると、1 つのスクリプトが実行されます。この場合
tail -f /dev/null
、他には何も実行されません。Ubuntu コンテナは完全な Ubuntu VM ではありません。 - 通常の Ubuntu ブート プロセスはコンテナー内では実行されません。サービスは一切変更されません。手順:
- 代わりにチェックアウトしてファイルの構文を確認する
docker run ...
ことをお勧めしますdocker-compose
docker-compose.yaml
- パラメータをチェックアウトする
command
かentrypoint