docker容器内使用apt报错E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)以及Dockerfile文件里USER的作用
一、问题背景
1、问题描述
docker 中执行:apt-get update
报错:E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
2、问题原因:权限不足,请使用 root 用户
3、解决方案:0 表示 root 用户
docker exec -it id /bin/bash
// 改为
docker exec -u 0 -it id /bin/bash
二、Dockerfile 具体原因及如何解决
使用 Dockerfile 构建一个镜像,如果使用的 base image 设置了 USER 项,则之后的所有构建动作则切换到了 USER 指定的用户,且 docker run
该镜像后的用户也是USER 指定的用户。
因此为了在 base image 上继续添加构建动作,则可以使用 USER root
切换到 root 用户执行构建,再在构建结束时使用 USER someone
切换为原用户。
FROM someimage
...
USER root
...
USER someone
...
比如我在 RUN apt update 之前使用 USER root 切换到 root 用户执行构建即可。
比如我在使用 opengauss 镜像的时候,因为镜像启动 opengauss 的时候需要使用 omm 账户,但是我在镜像之前需要使用 apt 去安装 ssh,之后还需要通过 root 账户去启动 ssh。所以整体用户流程就是这样
...
USER root
# 这里可以使用apt去下载或一些其他操作
...
USER omm
CMD ['opengauss'] # 这里得用omm账户去启动opengauss
USER root # 启动完之后得再切回 root,以后续去开启 ssh 服务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律