Dockerfile中以非root用户kong解压zip文件失败原因咨询
问题原因与解决办法
这个报错的核心原因是当前工作目录的权限问题,咱们一步步拆解清楚:
- 你切换到
kong用户后,Docker默认的工作目录还是/(属于root用户),并没有自动切换到kong的家目录/home/kong。 - 当你执行
unzip /home/kong/my-archive.zip时,unzip默认会把文件解压到当前工作目录(也就是/),但kong用户没有权限在/下创建my-archive目录,自然就触发了Permission denied错误。 - 而用
root用户执行时,本身就拥有系统最高权限,能在任意目录创建文件/文件夹,所以解压能成功。
解决方法(任选其一即可)
方法1:明确指定解压目录
在unzip命令里直接指定要解压到/home/kong,避开权限受限的目录:
RUN useradd -ms /bin/bash kong RUN echo "kong:password" | chpasswd RUN adduser kong sudo USER kong RUN wget "${url}/my-archive.zip" -P /home/kong RUN unzip /home/kong/my-archive.zip -d /home/kong
方法2:提前切换工作目录到/home/kong
用WORKDIR指令把后续命令的工作目录切换到kong的家目录,这样所有操作都在有权限的目录下进行:
RUN useradd -ms /bin/bash kong RUN echo "kong:password" | chpasswd RUN adduser kong sudo USER kong WORKDIR /home/kong RUN wget "${url}/my-archive.zip" RUN unzip my-archive.zip
方法3:临时切换目录执行解压
在unzip前用cd命令切换到/home/kong,确保解压操作在权限范围内完成:
RUN useradd -ms /bin/bash kong RUN echo "kong:password" | chpasswd RUN adduser kong sudo USER kong RUN wget "${url}/my-archive.zip" -P /home/kong RUN cd /home/kong && unzip my-archive.zip
内容的提问来源于stack exchange,提问作者u123
相关产品推荐
相关产品推荐

