Как заставить терминал VSCode входить в систему как пользователь без полномочий root при подключении к существующему удаленному контейнеру

Я создал несколько контейнеров для всех членов моей группы на основе собственного изображения. Цель состоит в том, чтобы использовать их в качестве сред разработки. Все контейнеры запускаются с командой tail -f /dev/nul, чтобы сделать их постоянными, даже если используется команда выхода, и все они имеют собственные имена, основанные на именах членов моей группы (${USER}_container). Мы прикрепляем к ним с помощью

docker exec -it --user $(id -u):$(cut -d: -f3 < <(getent group mygroup)) ${USER}_container bash

Таким образом, каждый пользователь отображается как член группы пользователей mygroup в контейнерах, а это означает, что нет проблем с правами собственности на файлы и разрешениями при использовании монтирования привязки совместного проекта.

Это отлично работает в терминале, но я бы также хотел, чтобы мы использовали VSCode для разработки. Однако, когда я подключаюсь к одному из удаленных контейнеров через VSCode и открываю оболочку, я получаю стандартную оболочку, в которой пользователь автоматически получает root-права. Очень важно, чтобы этого не происходило и чтобы мы все вошли в систему с нашими конкретными UID и GID.

Я нашел "docker.command.attach" параметр в настройках VSCode и изменил его на тот, который мы использовали выше, но это не помогло. Как указать VSCode подключаться к контейнеру так, как мы хотим, и открывать удаленные оболочки с пользовательскими UID и GID?


person MarkoF    schedule 29.07.2020    source источник


Ответы (1)


Нашел обходной путь методом перебора.

Я добавил конкретного пользователя прямо в Dockerfile (сначала определив группу, к которой он принадлежит):

RUN groupadd --gid $GID $GROUPNAME
RUN useradd --uid $UID --gid $GID -m $USERNAME

а затем в docker-compose добавил следующую строку под всеми службами, в которые я хотел войти с этим конкретным UID / GID:

user: $USERNAME

Для docker-compose мне сначала нужно было явно экспортировать имя пользователя перед сборкой моих контейнеров:

export USERNAME="Max Mustermann"

(если, конечно, я не планировал использовать собственное локальное имя пользователя, и в этом случае достаточно просто написать user: $USER, ничего не экспортируя).

Причина добавления пользователя в Dockerfile состоит в том, чтобы данные пользователя были перечислены в /etc/passwd, чтобы VSCode мог их забрать. Альтернативой отсутствию доступа к Dockerfile является создание небольшого сценария оболочки, который будет подключаться к контейнеру в качестве пользователя по умолчанию (root) и впоследствии добавить желаемый UID / GID.

После этого VSCode автоматически прикрепляется к контейнеру как конкретный пользователь.

person MarkoF    schedule 30.07.2020