我只想在系統啟動時執行一個腳本,經過多次嘗試並遵循多個教程和文檔,我無法做到這一點。
你能發現我做錯了什麼嗎?
在 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 虛擬機器! - 常規的 ubuntu 啟動過程不會發生在容器內。你的服務從未被觸及。如何進行:
docker run ...
我建議檢查文件docker-compose
的語法,而不是使用docker-compose.yaml
- 檢查參數
command
或entrypoint