시스템이 시작될 때 스크립트를 실행하고 싶은데 여러 번 시도하고 여러 튜토리얼과 문서를 따른 후에도 실행할 수 없습니다.
내가 뭘 잘못하고 있는지 알아낼 수 있나요?
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 컨테이너를 시작하고 이 컨테이너 내부에서 추가 서비스를 시작해야 한다는 것입니다.
- 당신을 컨테이너 지지자 가족으로 모시게 되어 반갑습니다.
- 설명하는 문제는 우분투와 관련이 없으며 컨테이너의 기본 동작입니다.
- 컨테이너를 시작할 때 귀하의 경우에는 단일 스크립트가 실행됩니다
tail -f /dev/null
. 우분투 컨테이너는 완전한 우분투 VM이 아닙니다! - 일반적인 우분투 부팅 프로세스는 컨테이너 내부에서 발생하지 않습니다. 귀하의 서비스는 절대 건드리지 않습니다. 진행 방법:
- 사용하는 대신 체크아웃하고 파일 구문을 사용
docker run ...
하는 것이 좋습니다.docker-compose
docker-compose.yaml
- 매개변수를 확인
command
하거나entrypoint