docker - 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 图像,但有人可以解释这个论点是如何工作的,或者提供一个链接来解释它。
解决方案
我们可以稍微不同地分解该命令行
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
和类似的面向调试的工具在容器内做事。
推荐阅读
- python - 列出所有 python3 类属性
- python - 如何使用python计算二进制文件中列表的数量?
- javascript - Python 的 Javascript 等效项 (input())
- c - OpenMP - 在并行循环中调用并行函数是否仍然可以提高性能?
- python - 如何修复相对导入错误:“没有已知的父包”?
- html - Hot 使子元素比父元素更宽
- node.js - 从 Jhipster 构建的应用程序中完全删除实体
- flutter - 由 SQLite 支持的 Flutter 应用的状态管理
- ios - iOS 15 Beta 5(19A5318f) runloop 运行崩溃
- android - 为什么列表视图不显示用户输入的文本