我是Docker的新手,试图理解它,但是我注意到Visual Studio在幕后做了很多“魔术”。我设法弄清了所有有关VS在调试带有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映像,但有人可以解释此参数的工作原理或提供解释该参数的链接。
答案 0 :(得分:1)
我们可以将该命令行的分解方式与
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
和类似的面向调试的工具在容器内进行操作。