代码之家  ›  专栏  ›  技术社区  ›  Jason H

Visual Studio Dockerfile入口点重写说明?

  •  1
  • Jason H  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  2
  •   David Maze    6 年前

    我们可以将命令行分解为

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

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

    所以 --entrypoint tail 选项将入口点设置为 tail ,而“命令”部分是 -f /dev/null

    忽略Dockerfile所说的操作;在设置容器运行时环境之后,运行 tail -f /dev/null 相反。

    这反过来又是一种常见的方式来启动一个容器,它不做任何事情,但也保持运行。那你可以用 docker exec 以及类似的面向调试的工具来在容器内执行操作。