Szc*_*ski 4 docker docker-compose
在苦心塑造 Dockerfile 和 docker-compose.yml 的过程中,为了调试问题,在正在进行的容器中运行 root shell 的正确方法是什么(无需实际启动它们的服务!)?我需要能够以 root 身份运行 shell,因为只有 root 才能完全访问包含我需要检查的信息的文件。
我可以修改 Dockerfile 和 docker-compose.yml 来实现这个目标;正如我上面写的,无论如何我都在雕刻这些。
然而,问题是我能想到的唯一方法是放入USER rootDockerfile 或user: rootdocker-compose.yml,但在docker-compose run <service> bash场景中放入 SimpleHaveNoEffect™ 。whoami在 shell 中,因此开始说,neo4j而不是root,无论我尝试什么。
我可能会添加sudo到没有的图像中,sudo但这应该被视为最后的手段。也直接使用 docker 而不是 docker-compose 不太可取。
在容器中启动 shell 的所有命令(包括,例如,docker-compose run有一个--user选项,因此您可以为调试 shell 指定任意用户。
docker-compose run -u root <service> bash
Run Code Online (Sandbox Code Playgroud)
如果您正在调试镜像构建,请注意每个构建步骤都会生成一个镜像,您可以在该镜像上运行调试 shell。(例如,检查步骤之前的RUN步骤以查看文件系统在执行之前的样子,或在执行之后查看其结果。)
$ docker build .
...
Step 7/9 : RUN ...
---> Using cache
---> 55c91a5dca05
...
$ docker run --rm -it -u root 55c91a5dca05 bash
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,命令 ( bash) 都会覆盖CMDDockerfile 中的 。如果您有一个ENTRYPOINT仍会运行的包装器脚本,但标准exec "$@"命令将启动您的调试 shell。如果您已将默认命令设为 run as ENTRYPOINT,请将其更改为CMD以更好地支持此用例(以及包装器入口点模式,如果您需要的话)。
如果你真的不能改变Dockerfile,你也可以覆盖ENTRYPOINT,但有点尴尬。
docker run --rm -it -u root --entrypoint ls myimage -al /app
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3681 次 |
| 最近记录: |