Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
2020年以root用户身份使用docker compose运行命令?_Docker_Docker Compose - Fatal编程技术网

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

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

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

I可以修改Dockerfile和docker-compose.yml以实现此目标;正如我在上面所写的,我正在雕刻这些东西

但问题是,我能想到的唯一方法是将
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
你可以参考