首页 > 解决方案 > Visual Studio Dockerfile 入口点覆盖解释?

问题描述

我是 Docker 新手并试图理解,但我注意到 Visual Studio 在幕后做了很多“魔术”。当您调试具有 Docker 支持的 ASP.NET Core 应用程序时,我已经设法弄清楚了我所有关于 docker run 命令的问题,除了一个。

docker run 
-dt 
-v "C:\Users\jnhaf\vsdbg\vs2017u5:/remote_debugger:rw" 
-v "D:\ProtoTypes\WebAppDockerOrNot\WebAppDockerOrNot:/app" 
-v "C:\Users\jnhaf\AppData\Roaming\ASP.NET\Https:/root/.aspnet/https:ro" 
-v "C:\Users\jnhaf\AppData\Roaming\Microsoft\UserSecrets:/root/.microsoft/usersecrets:ro" 
-v "C:\Users\jnhaf\.nuget\packages\:/root/.nuget/fallbackpackages2" 
-v "C:\Program Files\dotnet\sdk\NuGetFallbackFolder:/root/.nuget/fallbackpackages" 
-e "DOTNET_USE_POLLING_FILE_WATCHER=1" 
-e "ASPNETCORE_ENVIRONMENT=Development" 
-e "ASPNETCORE_URLS=https://+:443;http://+:80" 
-e "ASPNETCORE_HTTPS_PORT=44328" 
-e "NUGET_PACKAGES=/root/.nuget/fallbackpackages2" 
-e "NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages;/root/.nuget/fallbackpackages2" 
-p 4800:80 
-p 44328:443 
--entrypoint tail webappdockerornot:dev -f /dev/null

最后一个论点--entrypoint tail webappdockerornot:dev -f /dev/null是让我困惑的论点。我知道 VS 正在覆盖 Dockerfile 中的入口点设置,但我不明白也无法在网上找到的是什么tail webappdockerornot:dev-f /dev/null. 我发现那webappdockerornot:dev是 docker 图像,但有人可以解释这个论点是如何工作的,或者提供一个链接来解释它。

标签: dockerasp.net-core.net-coredockerfile

解决方案


我们可以稍微不同地分解该命令行

docker run \
  ... some other arguments ... \
  --entrypoint tail \
  webappdockerornot:dev \
  -f /dev/null

并将其与一般形式相匹配

docker run [OPTIONS] [IMAGENAME:TAG] [CMD]

因此该--entrypoint tail选项将入口点设置为tail,而“命令”部分为-f /dev/null。当 Docker 实际启动容器时,它会将命令作为附加参数传递给入口点。最后,这的净效果是

忽略 Dockerfile 说要做的事情;设置容器运行时环境后,tail -f /dev/null改为运行。

这反过来又是启动不做任何事情但仍保持运行的容器的常用方法。然后你可以使用docker exec和类似的面向调试的工具在容器内做事。


推荐阅读