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
--entrypoint tail webappdockerornot:dev -f /dev/null
tail webappdockerornot:dev
-f /dev/null
webappdockerornot:dev
我们可以将命令行分解为
docker run \ ... some other arguments ... \ --entrypoint tail \ webappdockerornot:dev \ -f /dev/null
docker run [OPTIONS] [IMAGENAME:TAG] [CMD]
所以 --entrypoint tail 选项将入口点设置为 tail ,而“命令”部分是 -f /dev/null
--entrypoint tail
tail
忽略Dockerfile所说的操作;在设置容器运行时环境之后,运行 tail -f /dev/null 相反。
tail -f /dev/null
这反过来又是一种常见的方式来启动一个容器,它不做任何事情,但也保持运行。那你可以用 docker exec 以及类似的面向调试的工具来在容器内执行操作。
docker exec