VS Code Remote-Containers:无法创建目录“/home/appuser”:

Posted

技术标签:

【中文标题】VS Code Remote-Containers:无法创建目录“/home/appuser”:【英文标题】:VS Code Remote-Containers: cannot create directory ‘/home/appuser’: 【发布时间】:2019-11-16 21:17:38 【问题描述】:

我正在尝试将 Remote - Containers extension 用于 Visual Studio Code,但是当我“在容器中打开文件夹”时,我收到此错误:

Run: docker exec 0d0c1eac6f38b81566757786f853d6f6a4f3a836c15ca7ed3a3aaf29b9faab14 /bin/sh -c set -o noclobber ; mkdir -p '/home/appuser/.vscode-server/data/Machine' &&  > '/home/appuser/.vscode-server/data/Machine/.writeMachineSettingsMarker' ;  2> /dev/null
mkdir: cannot create directory ‘/home/appuser’: Permission denied

我的 Dockerfile 使用:

FROM python:3.7-slim
...
RUN useradd -ms /bin/bash appuser
USER appuser

我也试过了:

RUN adduser -D appuser
RUN groupadd -g 999 appuser && \
    useradd -r -u 999 -g appuser appuser
USER appuser

如果我直接构建它们,它们都可以工作。我如何让它发挥作用?

【问题讨论】:

你有没有找到这个问题的答案@43Tesseracts ? 不,我放弃了。 我发起了一项赏金活动来引起人们的注意。来自 Microsoft 的文档没有帮助 code.visualstudio.com/docs/remote/… 【参考方案1】:

进入您的 WSL2 并使用命令 id 检查您的本地 uid(非 root)是什么。 就我而言,它是 UID=1000(ubuntu)。 将您的 dockerfile 更改为如下内容:

# For more information, please refer to https://aka.ms/vscode-docker-python
FROM python:3.8-slim-buster

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

# Install pip requirements
COPY requirements.txt .
RUN python -m pip install -r requirements.txt



WORKDIR /home/ubuntu
COPY . /home/ubuntu

# Creates a non-root user and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-python-configure-containers
RUN useradd -u 1000 ubuntu && chown -R ubuntu /home/ubuntu
USER ubuntu


# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
CMD ["python", "app.py"]

【讨论】:

【参考方案2】:

对我有用的是在我的 Dockerfile 中创建一个非 root 用户,然后配置 VS Code 开发容器以使用该用户。

步骤 1. 在 Docker 映像中创建非 root 用户

ARG USER_ID=1000
ARG GROUP_ID=1000
RUN groupadd --system --gid $GROUP_ID MY_GROUP && \
    useradd --system --uid $USER_ID --gid MY_GROUP --home /home/MY_USER --shell /sbin/nologin MY_USER

步骤2.在你的项目根目录下配置.devcontainer/devcontainer.json文件(应该在你启动远程开发时创建)

"remoteUser": "MY_USER" <-- this is the setting you want to update

如果你使用 docker compose,可以通过配置 .devcontainer/docker-compose.yml 来配置 VS Code 以非 root 用户身份运行整个容器,但我对上述过程很满意,所以我没有进一步试验.

通过阅读有关此主题的VS Code docs,您可能会获得一些额外的见解。

【讨论】:

以上是关于VS Code Remote-Containers:无法创建目录“/home/appuser”:的主要内容,如果未能解决你的问题,请参考以下文章

VS studio 与 VS code 进行主题转换

VS studio 与 VS code 进行主题转换

Flutter Doctor 看不到 vs code ,VS code 没有检测到 flutter/bin

Code[VS] 1022 覆盖 题解

vs-code-server docker安装

VS Code识别编辑规范,ESlint规则,VS Code保存去掉自动加分号逗号双引号