我基于自定义图像为我的组的所有成员创建了多个容器。目的是将它们用作开发环境。所有容器都使用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?
答案 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之后,将以该特定用户的身份自动附加到容器。