Как подключить VSCode к удаленному контейнеру Docker при установке правильного пользователя

Я запускаю контейнер Docker с помощью специального сценария bash, который запускает контейнер, а затем создает пользователя X с динамическим именем, UID и GUID в контейнере. Затем я могу выполнить bash в контейнере и выполнять действия от имени этого пользователя X. Сценарий также создает пользователя «псевдоним» с именем vscode с тем же UID, что и ранее созданный динамический пользователь X.

В VSCode я могу подключиться к этому контейнеру. Два вопроса:

  1. Как я могу настроить VSCode для выполнения всех действий как пользователь vscode или как пользователь X? (При использовании devcontainer.json для создания контейнера это тривиально, но теперь я подключаюсь к существующему контейнеру, а devcontainer.json не используется).
  2. В devcontainer.json у вас есть возможность автоматически устанавливать расширения. Какой файл настроек мне нужно создать для автоматической установки расширений при присоединении к контейнеру?

Решение должно быть автоматизировано. Например. ручное вмешательство и фиксация образа, как предложено ниже, возможно, но пользователям будет намного сложнее просто использовать мой образ Docker.

Я обновился до vscode 1.39 и попытался добавить:

ADD server-env-setup /root/.vscode-server/server-env-setup

Но похоже, что server-env-setup используется только для WSL.


person dwjbosman    schedule 12.10.2019    source источник


Ответы (2)


Я отвечу на ваши вопросы в обратном порядке:

VSCode устанавливает расширения после создания контейнера с помощью команды docker exec.

А теперь рецепт: Проще всего взять контейнер, уже созданный VSCode:

  1. Запустите «Открыть папку в контейнере» для создания контейнера разработчика.
  2. После того, как контейнер готов, и вы можете работать с VSCode. Остановите свою среду, нажав «Закрыть удаленное соединение».
  3. Запустите docker ps -a. Вы должны увидеть последние умершие контейнеры примерно так:  последние запущенные образы докеров
  4. Как вы можете увидеть последний запущенный контейнер: a7aa5af7ec08 vsc-typescript-2ea9f347739c5397afc431028000c02b. Это ваш контейнер со всеми установленными расширениями. И неважно, как вы устанавливаете расширения вручную или настраиваете через devcontainer.json.
  5. Запустите docker commit a7aa5af7ec08 all-installed-vscode-image:latest. Теперь у вас есть образ докера со всем вашим любимым программным обеспечением. Вы можете загрузить этот образ в свой любимый реестр докеров и использовать его также на других машинах.
  6. Теперь вы можете запустить docker run -i -u vscode all-installed-vscode-image:latest. И прикрепите vscode к этому контейнеру. Это ответ на ваш первый вопрос.

Кроме того, вы можете просмотреть документацию по vscode и использовать devcontainer .json при подключении к уже запущенным контейнерам и даже контейнерам, запущенным на удаленные машины.

person ozlevka    schedule 12.10.2019
comment
Это, безусловно, выход. Можно ли как-то сделать это без ручных действий, т.е. только с Dockerfile? См. Обновленный вопрос. - person dwjbosman; 15.10.2019
comment
Dockerfile Я не знаю ... Но если вы читаете документацию, просто перейдите по предоставленной мной ссылке. Вы можете увидеть, как заставить vscode всегда устанавливать расширения: code.visualstudio. com / docs / remote / - person ozlevka; 15.10.2019
comment
Спасибо за предложение. Теперь я могу устанавливать плагины автоматически. Первый вопрос о настройке пользователя пока не решен. Я не могу запустить контейнер с помощью -u vscode, потому что сценарий bash, запускающий контейнер, после запуска динамически создает пользователя. Это связано с тем, что UID / GUID неизвестны при создании образа Docker. Я попытался обновить вопрос, чтобы было понятнее - person dwjbosman; 18.10.2019

VSCode теперь реализует свойство «remoteUser», которое вы можете установить в конфигурации образа. Это гарантирует, что VSCode войдет в контейнер как правильный пользователь.

person dwjbosman    schedule 24.02.2020