Docker容器中用nohup启动脚本报错:无法识别参数nohup
问题原因解析
1. 启动报错的核心原因
你的容器默认ENTRYPOINT是simple_init.py脚本,Docker中当使用数组形式的exec格式CMD时,CMD的所有内容会被当作ENTRYPOINT的命令行参数传递。你配置的CMD ["nohup","/bin/scripts/run_test.sh","&"],会让nohup、/bin/scripts/run_test.sh、&全部成为simple_init.py的参数,而该脚本并不支持这些参数,因此抛出unrecognized arguments的错误。
2. 不用nohup时容器提前终止的原因
当你将不带&的命令设为ENTRYPOINT时,run_test.sh会在前台执行。如果脚本内部是通过后台方式启动jar进程(比如java -jar xxx.jar &),脚本执行到这一行后会继续推进,直到整个脚本执行完毕,此时作为ENTRYPOINT的脚本进程结束,Docker会直接终止容器,导致后台运行的jar进程被强制杀死,无法完成预期操作。
你试图用nohup和&让脚本后台运行,本质是想让进程脱离前台生命周期,避免容器随脚本结束而终止,但因为容器默认ENTRYPOINT的存在,这个逻辑被打断,反而触发了参数错误。
内容的提问来源于stack exchange,提问作者Rajeev Akotkar
相关产品推荐
相关产品推荐

