我的标题解释了大部分内容,但想了解为什么我可以访问https://本地主机:32770/ https://localhost:32770/当我在 Visual Studio 中调试时获取我的 API 端点,但当我结束调试时它变得不可用。
我目前正在花几天时间研究 Docker 和 Kubernetes,这有点难倒我,我真的很想填补我的知识空白。
容器在创建后仍然保持运行状态,那么发生了什么变化呢?
我注意到这是在构建开始时运行的:
docker exec -i 0f855d9b4c801bf8c52da48e6dd02ffdf0fe7242fde22fb9a221616e4b2900f9 /bin/sh \
-c "if PID=$(pidof dotnet); then kill $PID; fi"
但我不明白这会如何改变调试结束后发生的情况,而此时是在 dockerfile 运行之前以及所有内容之前。我不明白命令中的 -c,但我确实明白引号中的脚本在以下容器中运行后docker exec
syntax docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
。看来这个脚本在创建新代码之前会杀死现有的代码构建。
这是在 dockerfile 运行之前运行的
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"
我在这里没有看到任何会改变容器运行方式的内容,在本例中 rm '在构建后删除中间容器(默认为 true)' 根据docker build --help
接下来运行 dockerfile,它几乎是 ASP.NET core 应用程序的默认文件,它具有
EXPOSE 80
EXPOSE 443
其余的都是简单的构建步骤。
毕竟,我似乎找不到太多关于正在发生的事情的迹象。我的猜测是它与 IIS Express 有关,但实际上我不太了解它发生了什么以及 Visual Studio 何时进行调试。当我调试以打开 docker 容器的本地主机端口时,幕后运行的情况是什么?
编辑:我发现一个 docker run 命令可能与它有关,但也可能没有。 docker run 命令有-P
标记为“将所有公开的端口发布到随机端口”,但容器永远不会停止运行,所以我是否应该无法找到这些端口并连接到 API?