Как правильно использовать пользовательский образ в удаленных контейнерах VSCode

#visual-studio-code #vscode-devcontainer

Вопрос:

В настоящее время я работаю над проектом, который требует, чтобы я использовал удаленный контейнер 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 создают пользователя по умолчанию, не являющегося пользователем 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 так, чтобы контейнер был смонтирован в домашнем каталоге пользователя.

Unfortunately this overrides the dummyfile that was touch ed during the building stage (cf the Dockerfile ).

Conclusion

I’m having a hard time finding good resources to learn how to use VSCode Remote Containers without the Microsoft images.

I’m trying to find a good way to declare a custom user much like the Microsoft images do.

I’m trying to find a way to not override the files that are here before the mount takes place.