Ubuntu下Docker构建miniflux报go权限拒绝与/pkg非目录错误
Miniflux Debian 安装包 Docker 构建报错修复
问题根因说明
构建过程一共存在三类问题,分别对应不同的报错:
- 开头的
/bin/sh: 1: go: Permission denied是宿主机执行make解析变量时,root用户环境下找不到本地go二进制导致的提示,不影响容器内的实际构建流程。 - 连接VPN时构建卡住是Docker网络路由和VPN规则冲突,叠加Debian官方源海外访问速度慢导致的网络问题,不属于权限错误。
- 最终构建失败的核心报错
cp: cannot create regular file '/pkg/': Not a directory是挂载路径冲突导致:如果宿主机项目根目录下存在名为pkg的普通文件(而非目录),Docker挂载时会直接将容器内的/pkg路径覆盖为这个普通文件,导致后续复制deb包时目标路径不是目录,写入失败。
具体修复步骤
1. 修复挂载路径冲突
首先在项目根目录执行命令清理冲突文件,创建独立的输出目录:
# 删除可能存在的同名冲突文件 rm -f ./pkg # 创建专门存放deb安装包的输出目录,避免重名冲突 mkdir -p ./deb-output
然后修改项目根目录Makefile中debian目标的docker run配置,将原来挂载整个项目目录的逻辑改为只挂载输出目录:
找到以下原有配置:
@ docker run --rm \ -v ${PWD}:/pkg $(DEB_IMG_ARCH)/miniflux-deb-builder
替换为:
@ docker run --rm \ -v ${PWD}/deb-output:/pkg $(DEB_IMG_ARCH)/miniflux-deb-builder
2. 配置容器内目录权限
修改packaging/debian/Dockerfile,在执行构建脚本前提前创建/pkg目录并配置写入权限,避免基础镜像内不存在该路径的问题,在原有两行chmod配置后新增一行:
RUN ["chmod", "+x", "/src/packaging/debian/build.sh"] RUN ["chmod", "+x", "/src/packaging/debian/miniflux.postinst"] # 新增以下行 RUN mkdir -p /pkg && chmod 777 /pkg CMD ["/src/packaging/debian/build.sh"]
3. 消除宿主机go权限提示
这个提示不影响构建,要彻底消除可以将当前用户加入docker用户组,后续无需用sudo执行make命令:
sudo usermod -aG docker $USER
执行完成后注销当前用户重新登录,后续直接执行make debian即可,不需要加sudo,也不会再出现go命令权限报错。
4. 优化VPN环境下的构建网络
如果开VPN时apt下载包速度慢、容易卡住,可以修改Dockerfile将Debian源替换为国内镜像源,在apt更新命令前新增源替换配置:
找到原有apt安装命令的开头:
RUN apt-get update -q && \ apt-get install -y -qq build-essential devscripts dh-make dh-systemd && \ mkdir -p /build/debian
替换为:
# 替换为国内apt源 RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \ sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \ apt-get update -q && \ apt-get install -y -qq build-essential devscripts dh-make dh-systemd && \ mkdir -p /build/debian
验证构建
所有修改完成后,执行以下命令重新构建:
make clean make debian
构建成功后,生成的deb安装包会存放在项目根目录的deb-output文件夹下。
注:构建过程中出现的
warning: the authors of lintian do not recommend running it with root privileges!是正常提示,不影响安装包的生成和使用,可以忽略。
内容的提问来源于stack exchange,提问作者Jia
相关产品推荐
相关产品推荐

