#docker #ubuntu #visual-studio-code #vscode-remote
#docker #ubuntu #visual-studio-code #vscode-удаленный
Вопрос:
Я пытаюсь создать контейнер docker для использования в качестве контейнера удаленной разработки. Я продолжаю получать сообщение об ошибке, и я не уверен, как ее устранить. Если я не задаю "remoteUser": "developer"
параметр в файле devcontainer.json, то он работает, потому что он не пытается запустить контейнер разработки от имени удаленного пользователя. Однако я не хочу запускать контейнер разработки от имени root.
mkdir: не удается создать каталог ‘/home / developer’: отказано в разрешении
Dockerfile:
FROM ubuntu:latest
# Avoid warnings by switching to noninteractive
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y update
amp;amp; apt-get -y install --no-install-recommends apt-utils dialog git wget
#
# Add remote development (developer) group/user.
amp;amp; groupadd -g 1000 -o developer
amp;amp; useradd -u 1000 -g 1000 developer
#
# Clean up
amp;amp; apt-get autoremove -y
amp;amp; apt-get clean -y
amp;amp; rm -rf /var/lib/apt/lists/*
# Switch back to dialog for any ad-hoc use of apt-get
ENV DEBIAN_FRONTEND=dialog
Полный вывод:
[18 ms] Start: Resolving remote
[20 ms] Setting up container for folder or workspace: C:ReposSample
[21 ms] Start: Check Docker is running
[21 ms] Start: Run: docker info
[666 ms] Start: Run: docker ps -q -a --filter label=vsch.local.folder=C:ReposSample --filter label=vsch.quality=stable
[1087 ms] Start: Run: docker inspect --type container 1739eb19eccb
[1504 ms] Start: Starting container
[1504 ms] Start: Run: docker start 1739eb19eccb79a4c0c6390275caf5224c0b5d94385ee28064a8fb504704c12a
[3063 ms] Start: Run: docker ps -q -a --filter label=vsch.local.folder=C:ReposSample --filter label=vsch.quality=stable
[3503 ms] Start: Run: docker inspect --type container 1739eb19eccb
[3915 ms] Start: Inspecting container
[3916 ms] Start: Run: docker inspect --type container 1739eb19eccb79a4c0c6390275caf5224c0b5d94385ee28064a8fb504704c12a
[4342 ms] Start: Run: docker exec -i -u developer -e VSCODE_REMOTE_CONTAINERS_SESSION=34411177-6cf8-408f-8914-a454274269cf1601787357110 1739eb19eccb79a4c0c6390275caf5224c0b5d94385ee28064a8fb504704c12a /bin/sh
[4352 ms] Start: Run in container: uname -m
[5739 ms] x86_64
[5740 ms]
[5740 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
[5743 ms] NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[5744 ms]
[5744 ms] Start: Run in container: cat /etc/passwd
[5748 ms] Start: Setup shutdown monitor
[5754 ms] Forking shutdown monitor: c:Usersmichael.vscodeextensionsms-vscode-remote.remote-containers-0.140.1distshutdownMonitorProcess \.pipevscode-remote-containers-035ad203a5af805d0d3da68a329a3c395d0dd338-sock singleContainer Info c:UsersmichaelAppDataRoamingCodelogs20201003T145211exthost1ms-vscode-remote.remote-containers
[5772 ms] Start: Run in container: test -d /home/developer/.vscode-server
[5778 ms]
[5778 ms]
[5778 ms] Exit code 1
[5779 ms] Start: Run in container: test -d /home/developer/.vscode-remote
[5790 ms]
[5791 ms]
[5791 ms] Exit code 1
[5791 ms] Start: Run in container: set -o noclobber ; mkdir -p '/home/developer/.vscode-server/data/Machine' amp;amp; { > '/home/developer/.vscode-server/data/Machine/.writeMachineSettingsMarker' ; } 2> /dev/null
[5796 ms]
[5796 ms] mkdir: cannot create directory '/home/developer': Permission denied
[5796 ms] Exit code 1
[5797 ms] Start: Run in container: test -d /home/developer/.vscode-server/bin/2af051012b66169dde0c4dfae3f5ef48f787ff69
[5799 ms]
[5800 ms]
[5800 ms] Exit code 1
[5800 ms] Installing VS Code Server for commit 2af051012b66169dde0c4dfae3f5ef48f787ff69
[5800 ms] Start: Run in container: mkdir -p /home/developer/.vscode-server/bin/2af051012b66169dde0c4dfae3f5ef48f787ff69_1601787364083
[5815 ms]
[5815 ms] mkdir: cannot create directory '/home/developer': Permission denied
[5815 ms] Exit code 1
[5818 ms] Command in container failed: mkdir -p /home/developer/.vscode-server/bin/2af051012b66169dde0c4dfae3f5ef48f787ff69_1601787364083
Комментарии:
1. Вы создаете пользователя без
home
каталога, а затем пытаетесьrun
использовать контейнер в интерактивном режиме как непривилегированный пользователь, пытающийсяmkdir -p ...
войти внутрь/home
, которому принадлежитroot:root
. Вы можете обновить своюuseradd
команду, чтобы создать домашний каталог пользователей, т.Е.:groupadd -g 1000 -o developer amp;amp; useradd -u 1000 -d /home/developer -m -k /etc/skel -g 1000 developer
.2. @masseyb: Можете ли вы указать свой комментарий в качестве ответа, чтобы я мог принять его в качестве ответа?
3. Извините, совершенно вылетело из головы. ТАК что напомнило мне 🙂 Выполнено. Примечание для
-k
опции, на самом деле она не требуется, чаще всего содержит такие файлы.bashrc
, как.bash_aliases
, и т.д.
Ответ №1:
Команда useradd -u 1000 -g 1000 developer
не создает домашний каталог пользователей. Он /home
принадлежит root
пользователю, поэтому после того, как вы docker exec
войдете в контейнер как непривилегированный developer
пользователь и попытаетесь создать каталоги в /home
каталоге, вы получите «отказано в разрешении».
Вы можете создать домашний каталог пользователей с правильными разрешениями, изменив useradd
команду : useradd -u 1000 -d /home/developer -m -k /etc/skel -g 1000 developer
.
Выдержки из useradd
man
страниц:
-d
: Новый пользователь будет создан с использованиемHOME_DIR
в качестве значения для каталога входа пользователя. По умолчанию добавляетсяLOGIN
имяBASE_DIR
и используется в качестве имени каталога для входа. КаталогHOME_DIR
не обязательно должен существовать, но он не будет создан, если он отсутствует.-m
: Создайте домашний каталог пользователя, если он не существует. Файлы и каталоги, содержащиеся в каталоге скелета (который можно определить с-k
помощью опции), будут скопированы в домашний каталог.-k
: Каталог скелета, который содержит файлы и каталоги, подлежащие копированию в домашнем каталоге пользователя, когда домашний каталог создаетсяuseradd
.