如何将dotnet命令作为docker中的第二个命令?

vlju58qv  于 2023-04-11  发布在  Docker
关注(0)|答案(1)|浏览(103)

这是我的Dockerfile中的CMD指令:

CMD [ "/bin/bash", "-c", "dotnet /Project/Api.dll" ]

当我使用docker exec -it将交互式bash放入容器时,我看到dotnet的PID为1。

ps -ef

这意味着我不能杀死它并重新运行它。kill -9 1不工作。
我怎样才能使它不是入口进程?我怎样才能在它之前运行一些东西,这样我就可以在容器内杀死它?

bpsygsoo

bpsygsoo1#

CMD [ "/bin/bash", "-c", "dotnet /Project/Api.dll" ]

给定的命令工作正常,但您的要求是稍后运行此命令,对吗?
您可以在单独的脚本中编写自定义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
希望这能帮上忙。

相关问题