当前位置: 首页 > 知识库问答 >
问题:

我如何成为docker容器中的root

宗政德宇
2023-03-14

我在本地机器上运行这个命令docker run-d--name SonarQube-p9000:9000-p9092:9092 SonarQube

这将从dockerhub获取分支的映像,然后创建映像的容器。现在我想对文件进行一些更改,但容器中没有编辑器。我尝试使用apt-get安装vi,但它说我需要是根用户才能执行命令,当我编写sudo时,它说找不到命令。如何在容器中安装编辑器?

我运行这个命令来安装vim sudo apt get install vim

这就是我得到的错误

bash:sudo:未找到命令

共有2个答案

骆英纵
2023-03-14

根据Sonorqube Docker信息https://hub.docker.com/_/sonarqube/配置文件位于绑定挂载的持久卷中。您可以在本地目录中更改配置

图像包含SonarQube安装在 /opt/sonarqube.可以使用绑定挂载的持久卷覆盖选定的文件或目录,例如:

sonarqube_conf:/opt/sonarqube/conf:配置文件,如sonar。性质

或者您可以在命令行中指定它们

> $ docker run -d --name sonarqube \  
>     -p 9000:9000 \  
>     -v /path/to/conf:/opt/sonarqube/conf \  
>     -v /path/to/data:/opt/sonarqube/data \  
>     -v /path/to/logs:/opt/sonarqube/logs \  
>     -v /path/to/extensions:/opt/sonarqube/extensions \  
>     sonarqube

您应该尽量不要直接在Docker容器中编辑文件。如果您真的需要在运行的容器中获取文件,请尝试在本地编辑文件,并将Docker cp文件放入容器

https://docs.docker.com/engine/reference/commandline/cp/

Docker cp[选项]容器:SRC_PATHDEST_PATH|-

如果您仍然希望在容器中使用sudo,请参阅这篇SO帖子,它可能会有所帮助。

韩景胜
2023-03-14

尝试向docker传递用户运行命令。

docker run -it --user root --name SonarQube -p 9000:9000 -p 9092:9092 sonarqube

但是您可能会看到这种方法的相同问题,因为这将使用根启动容器,而不是用户。

因此,我建议采用以下方法。

FROM sonarqube
USER root
RUN apt-get update \
    && apt-get install -y vim
USER sonarqube
ENTRYPOINT ["./bin/run.sh"]

使用者

root(id=0)是容器中的默认用户。图像开发人员可以创建其他用户。这些用户可以通过名称访问。传递数字ID时,用户不必存在于容器中。

开发人员可以使用Dockerfile USER指令设置默认用户来运行第一个进程。启动容器时,操作员可以通过传递-u选项来重写USER指令。

-u="", --user="": Sets the username or UID used and optionally the groupname or GID for the specified command.

The followings examples are all valid:
--user=[ user | user:group | uid | uid:gid | user:gid | uid:group ]

参考运行

 类似资料:
  • 我在Docker容器中安装了Oracle数据库,但不知道如何成为root用户。如果我从主人那里听到这个 或者 我得到 如果我做了 从主机,然后 从容器中,它询问root密码,但我不知道。 Hy主机操作系统是Ubuntu 18.04,链接到docker文件 编辑1: 发现了一个Docker错误。

  • 问题内容: 我在Mac上创建了一个Ubuntu Docker容器 我将端口设置为123。 我的容器IP是 在Mac上,我尝试ping我的容器, ,我收到icmp_seq 0的请求超时…。 我该怎么办?因此,我的本地计算机可以ping通我安装的容器。我是否在容器(这是一个普通的ubuntu系统)上缺少一些应用程序安装? 问题答案: 您不能直接使用Docker for Mac ping或访问容器接口

  • 问题内容: 我有这个容器基于(但是与我有相同的问题,这并不是很相关)。我到达需要的地方 我得到 我在任何内核日志中都找不到任何东西,而且没有任何有趣的结果。我显然可以在主机上执行此操作(使用任何其他对子树/节点)。在我上面的示例中,/ htdocs / www是Docker卷的安装点,但它似乎没有任何意义,因为容器内没有任何一对子树/节点。 问题答案: 要使用系统调用,您需要具备此功能。默认情况下

  • 我最担心的情况发生了:我的纯数据docker容器突然是空的。 这并不严重:这是一台开发机器,我有备份。但我最害怕的是,因为我知道我对Docker的理解仍然存在漏洞。 我在这个答案中读到了以下内容: Docker容器将一直保留在磁盘上,直到使用Docker rm显式删除它们。 以下是我感兴趣的容器(来自命令): 我有一个1)一个引用纯数据容器的mongo容器和2)纯数据容器本身。我最近在引用纯数据容

  • 我知道intellij有一个docker容器插件,但它似乎不允许我在容器内部开发。这个想法很简单,我不想将我的主机配置为具有正确的环境工具。我宁愿只设置一个docker容器,然后使用intellij在容器本身中查找lib、功能等。 这将对c、java和scala开发人员非常有帮助,而且对调试也非常有用。 那么,有可能用intellij在docker容器中开发吗?

  • 问题内容: 我正在运行容器 hypriot / rpi-busybox-httpd 我正在尝试SSH到docker容器:但它给出了错误: 我马上就做吗? 问题答案: 可能是您的映像未安装二进制/ bin / bash(如之前所建议),我遇到了同样的问题,因此我可以使用/ bin / sh进入容器 另一个解决方法是直接执行命令,而无需访问任何shell。