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

use*_*487 5 docker visual-studio-code

我正在使用带有 Docker 扩展的 VSCode。我正在通过 SSH 连接到远程计算机上的 docker。\n当我单击 docker 扩展中的容器并执行“附加 Visual Studio 代码”时,如果该容器是使用 root 用户启动的,则它可以正常附加。如果它是使用不同的 uid/gid 启动的,那么我会得到以下信息。并不是说该映像已从 dockerfile 正确设置了用户和组。

\n
[4909 ms] \n[4910 ms] Start: Run in container: cat /etc/passwd\n[4947 ms] User 33333:45678 not found in /etc/passwd.\n[4948 ms] Start: Run in container: test -d /root/.vscode-server\n[4982 ms] \n[4982 ms] \n[4982 ms] Exit code 1\n[4982 ms] Start: Run in container: test -d /root/.vscode-remote\n[5019 ms] \n[5019 ms] \n[5019 ms] Exit code 1\n[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\n[5057 ms] \n[5057 ms] mkdir: cannot create directory \xe2\x80\x98/root\xe2\x80\x99: Permission denied\n[5058 ms] Exit code 1\n[5059 ms] Start: Run in container: test -d /root/.vscode-server/bin/d5e9aa0227e057a60c82568bf31c04730dc15dcd\n[5095 ms] \n[5096 ms] \n[5096 ms] Exit code 1\n[5096 ms] Installing VS Code Server for commit d5e9aa0227e057a60c82568bf31c04730dc15dcd\n[5096 ms] Start: Run in container: mkdir -p /root/.vscode-server/bin/d5e9aa0227e057a60c82568bf31c04730dc15dcd_1595365126276\n[5133 ms] \n[5134 ms] mkdir: cannot create directory \xe2\x80\x98/root\xe2\x80\x99: Permission denied\n[5134 ms] Exit code 1\n
Run Code Online (Sandbox Code Playgroud)\n

小智 1

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

RUN groupadd --gid $GID $GROUPNAME
RUN useradd --uid $UID --gid $GID -m $USERNAME
Run Code Online (Sandbox Code Playgroud)

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

user: $USERNAME
Run Code Online (Sandbox Code Playgroud)

因为docker-compose在构建容器之前,您需要首先明确导出用户名:

export USERNAME="Max Mustermann"
Run Code Online (Sandbox Code Playgroud)

(当然,除非您使用自己的本地用户名,在这种情况下,只需编写user: $USER而不导出任何内容就足够了。

在 Dockerfile 中添加用户的原因是您希望列出用户数据,/etc/passwd以便 VSCode 可以获取它们。如果您无权访问 Dockerfile,您还可以创建一个小 shell 脚本,该脚本将以默认(root)用户身份附加到容器,并随后添加所需的 UID/GID。

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