1

我目前正在开发一个需要我使用 VSCode 远程容器的项目。我决定不将我的容器基于此处可用的官方 Microsoft 映像之一,而是基于epitechcontent/epitest-dockerdocker 映像。

到目前为止,我正在为容器使用以下配置:

.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我设置workspaceMounttype=bind,source=${localWorkspaceFolder},target=/home/babel所以容器安装在用户的主目录中。

不幸的是,这覆盖了dummyfiletouch构建阶段编辑的 (参见Dockerfile)。

结论

我很难找到好的资源来学习如何在没有 Microsoft 映像的情况下使用 VSCode 远程容器。

我正在尝试找到一种像 Microsoft 图像一样声明自定义用户的好方法。

我正在尝试找到一种在安装发生之前不覆盖此处的文件的方法。

4

0 回答 0