使用root以外的用户附加到Visual Studio代码中的远程Docker容器

ru9i0ody  于 2023-04-11  发布在  Docker
关注(0)|答案(2)|浏览(143)

我正在使用带有Docker扩展的VSCode。我通过SSH连接到远程机器上的docker。当我单击docker扩展中的容器并执行“Attach Visual Studio Code”时,如果容器是以root用户启动的,那么它会很好地连接。如果它是以不同的uid/gid启动的,那么我会得到以下内容。并不是说镜像从dockerfile中正确设置了用户和组。

[4909 ms] 
[4910 ms] Start: Run in container: cat /etc/passwd
[4947 ms] User 33333:45678 not found in /etc/passwd.
[4948 ms] Start: Run in container: test -d /root/.vscode-server
[4982 ms] 
[4982 ms] 
[4982 ms] Exit code 1
[4982 ms] Start: Run in container: test -d /root/.vscode-remote
[5019 ms] 
[5019 ms] 
[5019 ms] Exit code 1
[5019 ms] Start: Run in container: set -o noclobber ; mkdir -p '/root/.vscode-server/data/Machine' && { > '/root/.vscode-server/data/Machine/.writeMachineSettingsMarker' ; } 2> /dev/null
[5057 ms] 
[5057 ms] mkdir: cannot create directory ‘/root’: Permission denied
[5058 ms] Exit code 1
[5059 ms] Start: Run in container: test -d /root/.vscode-server/bin/d5e9aa0227e057a60c82568bf31c04730dc15dcd
[5095 ms] 
[5096 ms] 
[5096 ms] Exit code 1
[5096 ms] Installing VS Code Server for commit d5e9aa0227e057a60c82568bf31c04730dc15dcd
[5096 ms] Start: Run in container: mkdir -p /root/.vscode-server/bin/d5e9aa0227e057a60c82568bf31c04730dc15dcd_1595365126276
[5133 ms] 
[5134 ms] mkdir: cannot create directory ‘/root’: Permission denied
[5134 ms] Exit code 1
mlmc2os5

mlmc2os51#

我用相当暴力的方式解决了一个类似的问题。我直接在Dockerfile中添加了一个特定的用户(首先定义他们所属的组):

RUN groupadd --gid $GID $GROUPNAME
RUN useradd --uid $UID --gid $GID -m $USERNAME

然后在docker-compose中,在我想要使用该特定UID/GID登录的所有服务下添加以下行:

user: $USERNAME

对于docker-compose,在构建容器之前,您需要首先显式导出用户名:

export USERNAME="Max Mustermann"

(当然,除非您使用自己的本地用户名,在这种情况下,只编写user: $USER而不导出任何内容就足够了。
在Dockerfile中添加用户的原因是,您希望在/etc/passwd中列出用户数据,以便VSCode可以获取它们。如果您没有Dockerfile的访问权限,您也可以制作一个小的shell脚本,该脚本将作为默认(root)用户附加到容器,并随后添加所需的UID/GID。
在此之后,VSCode自动附加到容器中作为该特定用户。

nbysray5

nbysray52#

如果你可以访问运行Docker环境的机器,你可以通过Remote Explorer扩展连接到远程机器。在机器内部安装Docker扩展。然后,从Docker使用official guide。这是要点:
创建docker组:

sudo groupadd docker

将您的user添加到docker组。

sudo usermod -aG docker $USER

注销并重新登录,以便重新评估您的组成员身份。如果您在虚拟机中运行Linux,则需要restart虚拟机才能使更改生效。

警告

docker组向用户赠款root-level权限。有关这如何影响系统安全的详细信息,请参阅Docker Daemon Attack Surface。

相关问题