如何在设置正确用户的同时将 VSCode 附加到远程 Docker 容器

How to attach VSCode to a remote Docker container while setting the correct user

我用运行容器的特殊 bash 脚本启动了一个 Docker 容器,然后在容器中创建了一个具有动态名称、UID 和 GUID 的用户 X。然后我可以 bash 进入容器并以该用户 X 的身份执行操作。该脚本还创建了一个名为 vscode 的 'alias' 用户,其 UID 与之前创建的动态用户 X 相同。

在 VSCode 我可以附加到这个容器。两个问题:

  1. 如何设置 VSCode 以 'vscode' 用户或用户 X 的身份执行所有操作? (当使用 devcontainer.json 创建容器时,这是微不足道的,但现在我附加到现有容器并且不使用 devcontainer.json )。
  2. 在 devcontainer.json 中,您可以选择自动安装扩展。我需要创建哪个设置文件才能在附加到容器时自动安装扩展?

解决方案应该是自动化的。例如。手动干预并按照下面的建议提交图像是可能的,但会使用户更难仅使用我的 Docker 图片。

我更新到 vscode 1.39 并尝试添加:

ADD server-env-setup /root/.vscode-server/server-env-setup

但是"server-env-setup"好像只用于WSL

我将按倒序回答您的问题:

VSCode 在使用 docker exec 命令创建容器后安装扩展。

现在的秘诀:最简单的方法是使用已经由 VSCode 创建的容器:

  1. 运行 "Open folder on container" 用于创建开发容器。
  2. 容器完成后,您可以使用 VSCode。单击 "Close remote connection".
  3. 停止您的环境
  4. 运行docker ps -a。你应该看到最后一个死亡的容器是这样的:
  5. 如何查看最新的 运行ning 容器是:a7aa5af7ec08 vsc-typescript-2ea9f347739c5397afc431028000c02b。这是安装了所有扩展的容器。并且无论您如何手动安装扩展或通过 devcontainer.json.
  6. 配置都无关紧要
  7. 运行docker commit a7aa5af7ec08 all-installed-vscode-image:latest。现在你有一个安装了所有你喜欢的软件的 docker 图像。您可以将此图像上传到您最喜欢的 docker 注册表并在其他机器上使用。
  8. 现在您可以 运行 docker run -i -u vscode all-installed-vscode-image:latest。并将 vscode 附加到此容器。这是对您第一个问题的回答。

此外,您可以查看 vscode documentation and use devcontainer.json configurations when you attach to already running containers and even containers running on remote machines

VSCode 现在实现了 "remoteUser" 属性,您可以在图像配置中进行设置。这将确保 VSCode 以正确的用户身份登录容器。