首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Visual Studio中结束调试后我的停靠容器ASP.NET核心应用程序不可用

为什么在Visual Studio中结束调试后我的停靠容器ASP.NET核心应用程序不可用
EN

Stack Overflow用户
提问于 2020-04-28 02:56:35
回答 1查看 509关注 0票数 5

我的标题解释了其中的大部分内容,但我想了解为什么在Visual Studio中调试时可以访问https://localhost:32770/并获得我的API端点,但当我结束调试时,它变得不可用。

我现在正忙于花几天的时间研究Docker和Kubernetes,这让我有点困惑,我真的很想填补我知识上的空白。

容器在创建后仍在运行,那么是什么发生了变化?

我注意到这是在构建开始时运行的:

代码语言:javascript
复制
docker exec -i 0f855d9b4c801bf8c52da48e6dd02ffdf0fe7242fde22fb9a221616e4b2900f9 /bin/sh \
-c "if PID=$(pidof dotnet); then kill $PID; fi"

但我看不出这会如何改变调试结束后、dockerfile运行之前以及一切结束后发生的事情。我不理解命令中的-c,但我理解引号中的脚本在容器中运行后遵循docker exec语法docker exec [OPTIONS] CONTAINER COMMAND [ARG...]。在创建新的代码之前,这个脚本似乎会杀死现有的代码构建。

这在dockerfile运行之前运行

代码语言:javascript
复制
docker build -f "F:\Dev\API_files\API_name\Dockerfile" 
--force-rm 
-t API_name:dev 
--target base  
--label "com.microsoft.created-by=visual-studio" 
--label "com.microsoft.visual-studio.project-name=API_name" "F:\Dev\API_name"

我在这里没有看到任何会改变容器运行方式的东西,根据docker build --help的说法,这个实例中的rm“在构建后删除中间容器(默认值为true)”

接下来运行dockerfile,它几乎是ASP.NET核心应用程序的默认文件,它具有

代码语言:javascript
复制
EXPOSE 80
EXPOSE 443

其余的是简单的构建步骤。经过这一切之后,我似乎找不到太多关于正在发生的事情的迹象。我的猜测是它与IIS Express有关,但实际上我不知道它发生了什么,也不知道visual studios何时进行调试。当我调试为docker容器打开localhost端口时,幕后发生了什么?

编辑:我发现了一个docker run命令,可能与它有关,但也可能不是。docker run命令有“将所有暴露的端口发布到随机端口”的-P标志,但是容器永远不会停止运行,所以我应该找不到这些端口并连接到API吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-11 03:49:06

在调试过程中,如果您运行以下命令:

代码语言:javascript
复制
docker exec -it containerName bash -c 'pidof dotnet'

您将注意到,dotnet进程正在运行,当您停止调试并再次运行它时,您将看到该进程已完成。

如果您希望在容器中启动应用程序,而无需再次运行调试器,则只需在容器内运行启动dotnet进程即可。

你可以这样做,像这样运行一个脚本:

代码语言:javascript
复制
#Set these 3 variables
$containerName = "MyContainer"
$appDll = "myApp.dll"
$appDirectory = "/app/bin/debug/netcoreapp3.1"

$args = "/c docker exec -it $containerName bash -c 'cd $appDirectory;dotnet $appDll'"
Start-Process -FilePath "powershell" -ArgumentList $args -NoNewWindow

您可以通过再次运行此脚本来检查它是否起作用:

代码语言:javascript
复制
docker exec -it containerName bash -c 'pidof dotnet'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61466334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档