附加到现有远程容器时,如何使VSCode终端以非root用户身份登录

时间:2020-07-29 08:24:43

标签: docker visual-studio-code ssh vscode-remote

我基于自定义图像为我的组的所有成员创建了多个容器。目的是将它们用作开发环境。所有容器都使用tail -f /dev/nul命令运行,即使使用退出命令也可以使其永久保存,并且它们都具有基于我的组成员(${USER}_container)的名称的自定义名称。我们使用

docker exec -it --user $(id -u):$(cut -d: -f3 < <(getent group mygroup)) ${USER}_container bash

通过这种方式,每个用户都将显示为容器中“ mygroup”用户组的成员,这意味着使用联合项目绑定安装时文件所有权和权限没有问题。

这在终端中完美运行,但是我也希望我们使用VSCode进行开发。但是,当我通过VSCode附加到一个远程容器并打开一个外壳程序时,它为我提供了默认的用户自动成为root用户的外壳程序。非常重要的是,这种情况不会发生,并且我们都已使用特定的UID和GID登录。

我在VSCode设置中找到了"docker.command.attach"设置,并将其更改为上面我们正在使用的设置,但没有帮助。如何告诉VSCode以我们想要的方式附加到容器,以及如何使用自定义UID和GID打开远程shell?

1 个答案:

答案 0 :(得分:0)

找到了一种蛮力的解决方法。

我直接在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脚本,该脚本将作为默认(根)用户附加到容器,并随后添加所需的UID / GID。

此VSCode之后,将以该特定用户的身份自动附加到容器。

相关问题