Объяснение переопределения EntryPoint в Dockerfile в Visual Studio? - PullRequest
0 голосов
/ 09 сентября 2018

Я новичок в Docker и пытаюсь понять, но я заметил, что Visual Studio делает много «магии» за кулисами. Мне удалось выяснить все мои вопросы о команде Docker Run, которую использует VS, когда вы отлаживаете приложение ASP.NET Core с поддержкой Docker, кроме одного.

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 - это образ докера, но кто-то может объяснить, как работает этот аргумент, или дать ссылку на что-то, что его объясняет.

1 Ответ

0 голосов
/ 09 сентября 2018

Мы можем разбить эту командную строку немного по-другому, как

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

и сопоставьте это с общей формой

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

Таким образом, опция --entrypoint tail устанавливает точку входа на tail, а часть "command" - -f /dev/null. Когда Docker фактически запускает контейнер, он передает команду в качестве дополнительных аргументов точке входа. В итоге, чистый эффект от этого составляет

Игнорируйте, что сказал Dockerfile; после настройки среды выполнения контейнера запустите tail -f /dev/null.

, который, в свою очередь, является распространенным способом запуска контейнера, который ничего не делает, но также продолжает работать. Затем вы можете использовать docker exec и подобные ориентированные на отладку инструменты для работы внутри контейнера.

...