如何在Docker容器中成为root用户

时间:2019-10-04 10:30:54

标签: docker

我在本地计算机上运行此命令 docker run -d --name SonarQube -p 9000:9000 -p 9092:9092 sonarqube

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

我运行此命令来安装vim sudo apt-get install vim

这是我得到的错误

bash:sudo:找不到命令

2 个答案:

答案 0 :(得分:2)

尝试将用户传递给docker run命令。

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

但是这种方法可能会遇到同样的问题,因为它将以root而不是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 ]

reference-run

答案 1 :(得分:1)

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

  

这些映像包含位于/ opt / sonarqube的SonarQube安装。您   可以使用绑定安装的持久卷覆盖所选文件,或者   目录,例如:

     

sonarqube_conf:/ opt / sonarqube / conf:配置文件,例如   sonar.properties

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

> $ 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_PATH DEST_PATH |-

如果您仍然真的想在容器中添加sudo,请参阅此SO帖子,可能会有所帮助。