我只是想在系统启动时执行一个脚本,但经过多次尝试并遵循多个教程和文档后,我仍无法做到这一点。
你能发现我做错什么了吗?
在 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 无关,它是容器的默认行为。
- 启动容器时,只会执行一个脚本,就您而言
tail -f /dev/null
- 没有其他脚本。Ubuntu 容器不是完整的 Ubuntu VM! - 常规的 ubuntu 启动过程不会在容器内发生。您的服务永远不会受到影响。如何继续:
docker run ...
我建议不要使用checkout 和文件docker-compose
的语法docker-compose.yaml
- 检查参数
command
或entrypoint