You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在容器中打开现有文件夹时遇权限拒绝错误求助

解决VS Code Dev Container中Deno容器的权限错误(mkdir无法创建/home/deno)

问题描述

我用Hono写了个简单的Deno应用,通过以下来自docker.com的Dockerfile成功部署到容器中:

FROM denoland/deno:1.46.0

EXPOSE 1993

WORKDIR /app

USER deno

COPY deps.ts .
# RUN deno cache deps.ts

# These steps will be re-run upon each file change in your working directory:
COPY . .
# RUN deno cache main.ts

CMD ["run", "--allow-net", "main.ts"]

尝试按VS Code官方教程以容器打开项目时,先是遇到deno cache命令不识别的问题,我把相关命令注释掉了;接着又因devcontainer.json的注释行报错,删除所有注释后修改为:

{
    "name": "Existing Dockerfile",
    "build": {
        "context": "..",
        "dockerfile": "../Dockerfile"
    }
}

现在碰到了权限错误,无法创建VS Code Server所需的目录:

Command in container failed: mkdir -p '/home/deno/.vscode-server/bin' && ln -snf '/vscode/vscode-server/bin/linux-arm64/f1e16e1e6214d7c44d078b1f0607b2388f29d729' '/home/deno/.vscode-server/bin/f1e16e1e6214d7c44d078b1f0607b2388f29d729'

mkdir: cannot create directory '/home/deno': Permission denied

解决方案

1. 确保/home/deno目录存在并配置正确权限

官方Deno镜像默认包含deno用户和对应目录,但可能在构建流程中权限被意外改动。可以在切换用户前显式创建并设置目录权限:
修改Dockerfile:

FROM denoland/deno:1.46.0

EXPOSE 1993

WORKDIR /app

# 提前创建并设置/home/deno的权限
RUN mkdir -p /home/deno && chown -R deno:deno /home/deno

USER deno

COPY deps.ts .
# RUN deno cache deps.ts

COPY . .
# RUN deno cache main.ts

CMD ["run", "--allow-net", "main.ts"]

2. 在devcontainer.json中配置用户同步

通过配置remoteUser和updateRemoteUserUID,让VS Code自动同步本地用户UID与容器内用户UID,避免权限不匹配:
修改devcontainer.json:

{
    "name": "Existing Dockerfile",
    "build": {
        "context": "..",
        "dockerfile": "../Dockerfile"
    },
    "remoteUser": "deno",
    "updateRemoteUserUID": true
}

3. 修正COPY命令的文件权限

如果本地文件复制到容器后是root权限,切换到deno用户后会出现读写问题,建议在COPY时指定所有者:

COPY --chown=deno:deno deps.ts .
COPY --chown=deno:deno . .

4. 临时方案:以root启动VS Code Server(仅开发环境)

如果上述方法都不生效,开发环境下可以临时调整Dockerfile,先以root身份完成VS Code Server的初始化,再切换回deno用户:

FROM denoland/deno:1.46.0

EXPOSE 1993

WORKDIR /app

# 先以root完成目录初始化
RUN mkdir -p /home/deno/.vscode-server/bin && chown -R deno:deno /home/deno

USER deno

COPY deps.ts .
COPY . .

CMD ["run", "--allow-net", "main.ts"]

内容的提问来源于stack exchange,提问作者Mark Tyers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:15:05