gpt4 book ai didi

docker - 在 2020 年使用 docker-compose 以 root 身份运行命令?

转载 作者:行者123 更新时间:2023-12-02 18:13:20 25 4
gpt4 key购买 nike

在苦心雕刻Dockerfile和docker-compose.yml的过程中,什么是正确的方式 在工作中的容器中运行 root shell(而不实际启动他们的服务!)以调试问题?我需要能够以 root 身份运行 shell,因为只有 root 才能完全访问包含我需要检查的信息的文件。

可以 修改 Dockerfile 和 docker-compose.yml 以实现此目标;正如我上面写的,无论如何我都在雕刻这些。

然而,问题是我能想到的唯一方法是放置 USER root在 Dockerfile 或 user: root 中在 docker-compose.yml 中,但在 docker-compose run <service> bash 中的那些 SimplyHaveNoEffect™设想。 whoami在 shell 中这样开始说 neo4j而不是 root ,不管我怎么努力。

可能添加 sudo到没有 sudo 的图像,但这应该被考虑 不得已 .也直接使用 docker 而不是 docker-compose 不太可取。

最佳答案

在容器中启动 shell 的所有命令(包括,例如, docker-compose run 都有一个 --user 选项,因此您可以为调试 shell 指定任意用户。

docker-compose run -u root <service> bash

如果您正在调试镜像构建,请注意每个构建步骤都会生成一个镜像,您可以在该镜像上运行调试 shell。 (例如,检查 RUN 步骤之前的步骤以查看文件系统在执行之前的样子,或在执行之后查看其结果。)

$ docker build .
...
Step 7/9 : RUN ...
---> Using cache
---> 55c91a5dca05
...
$ docker run --rm -it -u root 55c91a5dca05 bash

在这两种情况下,命令( bash )都会覆盖 CMD在 Dockerfile 中。如果您有 ENTRYPOINT仍然会运行的包装脚本,但标准 exec "$@"命令将启动您的调试 shell。如果您已将默认命令作为 ENTRYPOINT 运行,将其更改为 CMD更好地支持这个用例(以及包装器入口点模式,如果你需要的话)。

如果你真的不能改变Dockerfile,你可以覆盖 ENTRYPOINT也是,但有点尴尬。

docker run --rm -it -u root --entrypoint ls myimage -al /app

关于docker - 在 2020 年使用 docker-compose 以 root 身份运行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60806756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com