如何在设置正确用户的同时将 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 我可以附加到这个容器。两个问题:
- 如何设置 VSCode 以 'vscode' 用户或用户 X 的身份执行所有操作? (当使用 devcontainer.json 创建容器时,这是微不足道的,但现在我附加到现有容器并且不使用 devcontainer.json )。
- 在 devcontainer.json 中,您可以选择自动安装扩展。我需要创建哪个设置文件才能在附加到容器时自动安装扩展?
解决方案应该是自动化的。例如。手动干预并按照下面的建议提交图像是可能的,但会使用户更难仅使用我的 Docker 图片。
我更新到 vscode 1.39 并尝试添加:
ADD server-env-setup /root/.vscode-server/server-env-setup
但是"server-env-setup"好像只用于WSL
我将按倒序回答您的问题:
VSCode 在使用 docker exec
命令创建容器后安装扩展。
现在的秘诀:最简单的方法是使用已经由 VSCode 创建的容器:
- 运行 "Open folder on container" 用于创建开发容器。
- 容器完成后,您可以使用 VSCode。单击 "Close remote connection".
停止您的环境
- 运行
docker ps -a
。你应该看到最后一个死亡的容器是这样的:
- 如何查看最新的 运行ning 容器是:a7aa5af7ec08 vsc-typescript-2ea9f347739c5397afc431028000c02b。这是安装了所有扩展的容器。并且无论您如何手动安装扩展或通过 devcontainer.json.
配置都无关紧要
- 运行
docker commit a7aa5af7ec08 all-installed-vscode-image:latest
。现在你有一个安装了所有你喜欢的软件的 docker 图像。您可以将此图像上传到您最喜欢的 docker 注册表并在其他机器上使用。
- 现在您可以 运行
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 以正确的用户身份登录容器。
我用运行容器的特殊 bash 脚本启动了一个 Docker 容器,然后在容器中创建了一个具有动态名称、UID 和 GUID 的用户 X。然后我可以 bash 进入容器并以该用户 X 的身份执行操作。该脚本还创建了一个名为 vscode 的 'alias' 用户,其 UID 与之前创建的动态用户 X 相同。
在 VSCode 我可以附加到这个容器。两个问题:
- 如何设置 VSCode 以 'vscode' 用户或用户 X 的身份执行所有操作? (当使用 devcontainer.json 创建容器时,这是微不足道的,但现在我附加到现有容器并且不使用 devcontainer.json )。
- 在 devcontainer.json 中,您可以选择自动安装扩展。我需要创建哪个设置文件才能在附加到容器时自动安装扩展?
解决方案应该是自动化的。例如。手动干预并按照下面的建议提交图像是可能的,但会使用户更难仅使用我的 Docker 图片。
我更新到 vscode 1.39 并尝试添加:
ADD server-env-setup /root/.vscode-server/server-env-setup
但是"server-env-setup"好像只用于WSL
我将按倒序回答您的问题:
VSCode 在使用 docker exec
命令创建容器后安装扩展。
现在的秘诀:最简单的方法是使用已经由 VSCode 创建的容器:
- 运行 "Open folder on container" 用于创建开发容器。
- 容器完成后,您可以使用 VSCode。单击 "Close remote connection". 停止您的环境
- 运行
docker ps -a
。你应该看到最后一个死亡的容器是这样的: - 如何查看最新的 运行ning 容器是:a7aa5af7ec08 vsc-typescript-2ea9f347739c5397afc431028000c02b。这是安装了所有扩展的容器。并且无论您如何手动安装扩展或通过 devcontainer.json. 配置都无关紧要
- 运行
docker commit a7aa5af7ec08 all-installed-vscode-image:latest
。现在你有一个安装了所有你喜欢的软件的 docker 图像。您可以将此图像上传到您最喜欢的 docker 注册表并在其他机器上使用。 - 现在您可以 运行
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 以正确的用户身份登录容器。