这是我的Dockerfile中的CMD指令:
CMD
CMD [ "/bin/bash", "-c", "dotnet /Project/Api.dll" ]
当我使用docker exec -it将交互式bash放入容器时,我看到dotnet的PID为1。
docker exec -it
dotnet
ps -ef
这意味着我不能杀死它并重新运行它。kill -9 1不工作。我怎样才能使它不是入口进程?我怎样才能在它之前运行一些东西,这样我就可以在容器内杀死它?
kill -9 1
bpsygsoo1#
给定的命令工作正常,但您的要求是稍后运行此命令,对吗?您可以在单独的脚本中编写自定义shell逻辑/处理并运行它,而不是运行上面的命令。这将巧妙地为您的dotnet进程分配不同的pid。
#!/bin/bash #some logic dotnet /Project/Api.dll
你要像这样运行你的脚本
ENTRYPOINT ["entrypoint.sh"]
这将在更大程度上解决您的问题。最后,为了优雅地结束/杀死你的dotnet进程,而不是使用kill命令,这是一种极端的侵入性。你可以使用一种组合,将你的dotnet应用程序放在background中,然后将其与Linux命令term命令相结合,这给了你一个很好的退出/错误挂钩。此外,还有一个关于你提到的pid 1场景的很棒的帖子:https://unix.stackexchange.com/questions/457649/unable-to-kill-process-with-pid-1-in-docker-container希望这能帮上忙。
background
term
1条答案
按热度按时间bpsygsoo1#
给定的命令工作正常,但您的要求是稍后运行此命令,对吗?
您可以在单独的脚本中编写自定义shell逻辑/处理并运行它,而不是运行上面的命令。
这将巧妙地为您的dotnet进程分配不同的pid。
你要像这样运行你的脚本
这将在更大程度上解决您的问题。
最后,为了优雅地结束/杀死你的dotnet进程,而不是使用kill命令,这是一种极端的侵入性。你可以使用一种组合,将你的dotnet应用程序放在
background
中,然后将其与Linux命令term
命令相结合,这给了你一个很好的退出/错误挂钩。此外,还有一个关于你提到的pid 1场景的很棒的帖子:https://unix.stackexchange.com/questions/457649/unable-to-kill-process-with-pid-1-in-docker-container
希望这能帮上忙。