我目前正在开发一个需要我使用 VSCode 远程容器的项目。我决定不将我的容器基于此处可用的官方 Microsoft 映像之一,而是基于epitechcontent/epitest-docker
docker 映像。
到目前为止,我正在为容器使用以下配置:
.devcontainer/devcontainer.json
{
"name": "Babel",
"build": {
"dockerfile": "Dockerfile",
},
"runArgs": [
"--cap-add=SYS_PTRACE",
"--security-opt",
"seccomp=unconfined"
],
"extensions": [
"ms-vscode.cpptools",
"ms-vscode.cmake-tools",
"twxs.cmake"
],
"remoteUser": "babel",
"workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/home/babel"
}
.devcontainer/Dockerfile
# Using the latest epitech image
FROM epitechcontent/epitest-docker
# Setup a custom user with similar permissions
RUN useradd -rm -d /home/babel -s /bin/zsh -g root -G root -u 1001 babel
# Configure our workspace
WORKDIR /home/babel
RUN touch dummyfile
我目前遇到以下问题。
容器用户权限
Microsoft VSCode Remote Containers 似乎为所有容器创建了一个默认的非 root 用户vscode
。由于我没有使用 Microsoft 映像,因此我正在寻找一种方法来创建与我的会话具有相同权限的用户,以便在容器中创建的文件与我的常规用户在容器外创建的文件相同。
为了实现这一点,我在 Dockerfile 中创建了一个新用户,并且还在为该用户设置了remoteUser
属性devcontainer.json
。
接下来发生的事情是,当我尝试在远程容器中创建一个文件时,它的权限与我的常规会话不同。
inside-the-container-shell> ls -l
-rw-rw-r-- 1 babel root 14 Sep 22 16:59 file-created-outside-container
-rw-r--r-- 1 babel root 0 Sep 22 19:27 file-created-inside-container
工作区和安装位置
在里面,Dockerfile
我将用户的主目录设置为/home/babel
,我也将其设置WORKDIR
为/home/babel
。另外,在里面devcontainer.json
我设置workspaceMount
为type=bind,source=${localWorkspaceFolder},target=/home/babel
所以容器安装在用户的主目录中。
不幸的是,这覆盖了dummyfile
在touch
构建阶段编辑的 (参见Dockerfile
)。
结论
我很难找到好的资源来学习如何在没有 Microsoft 映像的情况下使用 VSCode 远程容器。
我正在尝试找到一种像 Microsoft 图像一样声明自定义用户的好方法。
我正在尝试找到一种在安装发生之前不覆盖此处的文件的方法。