2020年以root用户身份使用docker compose运行命令?
在精心设计Dockerfile和docker-compose.yml的过程中,为了调试问题,在进行中的工作容器中运行根shell(而不实际启动其服务!)的正确方法是什么?我需要能够以root用户身份运行shell,因为只有root用户才能完全访问包含我需要检查的信息的文件 I可以修改Dockerfile和docker-compose.yml以实现此目标;正如我在上面所写的,我正在雕刻这些东西 但问题是,我能想到的唯一方法是将2020年以root用户身份使用docker compose运行命令?,docker,docker-compose,Docker,Docker Compose,在精心设计Dockerfile和docker-compose.yml的过程中,为了调试问题,在进行中的工作容器中运行根shell(而不实际启动其服务!)的正确方法是什么?我需要能够以root用户身份运行shell,因为只有root用户才能完全访问包含我需要检查的信息的文件 I可以修改Dockerfile和docker-compose.yml以实现此目标;正如我在上面所写的,我正在雕刻这些东西 但问题是,我能想到的唯一方法是将USER root放入Dockerfile或USER:root放入doc
USER root
放入Dockerfile或USER:root
放入docker-compose.yml中,但这些简单的方法不会产生任何效果™ 在docker compose中运行bash
场景<这样启动的shell中的code>whoami说的是neo4j
,而不是root
,无论我如何尝试
我可能将
sudo
添加到图像中,而图像中没有sudo
,但这应该是最后的选择。直接使用docker而不是docker compose也不太可取。在容器中启动shell的所有命令(包括,例如,具有--user
选项,因此您可以为调试shell指定任意用户
docker compose run-u root bash
如果您正在调试映像生成,请注意,每个生成步骤都会生成一个映像,您可以在该映像上运行调试shell(例如,在运行步骤之前检查该步骤,查看文件系统在执行之前的样子,或者在执行之后查看其结果。)
$docker构建。
...
步骤7/9:运行。。。
--->使用缓存
--->55c91a5dca05
...
$docker运行--rm-it-u根目录55c91a5dca05 bash
在这两种情况下,命令(bash
)将覆盖Dockerfile中的CMD
。如果您有一个仍将运行的ENTRYPOINT
包装脚本,但标准的exec“$@”
命令将启动调试shell。如果您已将默认命令设置为作为ENTRYPOINT
运行,请将其更改为CMD
,以更好地支持此用例(以及包装器ENTRYPOINT模式,如果需要的话)
如果确实无法更改Dockerfile,也可以覆盖入口点
,但这有点尴尬
docker run--rm-it-u root--entrypoint ls myimage-al/app
您也可以这样使用它:
version: '3'
services:
jenkins:
user: root
image: jenkins/jenkins:lts
ports:
- "8080:8080"
- "50000:50000"
volumes:
- /jenkins:/var/jenkins_home
你可以参考