Docker镜像推送失败:找不到sisidsdaemon.pid文件
Docker镜像推送Artifactory失败求助
问题现象
Docker构建成功,但推送镜像到Artifactory时出现如下错误:
The push refers to repository [jfrogartifactory.com/jenkins/k8stools] bd862c2c6862: Pushed fa9470006406: Pushing [==================================================>] 51.33MB/51.33MB 3416052442ea: Pushed 097ffe707280: Pushed 66902afc5923: Layer already exists 56c2913a98f0: Layer already exists 234119318760: Layer already exists 34f7184834b2: Layer already exists 5836ece05bfd: Layer already exists 72e830a4dff5: Layer already exists open /var/lib/docker/overlay2/jxl9gqgs0xj61kftk9b4casbo/merged/run/sisidsdaemon.pid: no such file or directory
对应的Dockerfile内容
FROM alpine:latest USER root ARG ARCH=amd64 RUN apk update && apk upgrade --no-cache && \ apk --no-cache add curl wget git jq yq ARG HELM_VERSION=3.13.0 ARG KUBECTL_VERSION=1.27.0 ARG KUBESEAL_VERSION=0.19.5 # Install kubectl RUN curl -sLO https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl && chmod +x kubectl && mv kubectl /usr/local/bin #Install Helm RUN curl -LO https://get.helm.sh/helm-v${HELM_VERSION}-linux-${ARCH}.tar.gz && \ tar -xzvf helm-v${HELM_VERSION}-linux-${ARCH}.tar.gz && \ mv linux-${ARCH}/helm /usr/local/bin/helm && \ chmod +x /usr/local/bin/helm && \ rm -rf linux-${ARCH} helm-v${HELM_VERSION}-linux-${ARCH}.tar.gz USER openjdk ENTRYPOINT ["/bin/sh"]
已尝试的操作
执行了以下Docker清理命令,但问题未解决:
docker rm -vf $(docker ps -aq) docker rmi -f $(docker images -aq) docker volume prune -f
环境信息
- OS: RHEL 8
- Docker version: 24.0.7
问题分析与解决方案
1. 修复用户不存在的问题
Dockerfile最后切换到openjdk用户,但alpine:latest镜像默认没有这个用户,这会导致镜像内部用户上下文异常,可能触发推送时的文件系统访问问题。
- 解决方案:
- 若无需特定用户,删除
USER openjdk指令,保持使用root用户; - 若必须使用
openjdk用户,需在Dockerfile中先创建该用户:RUN adduser -D openjdk USER openjdk - 若镜像需要Java环境,建议直接基于
openjdk:alpine镜像构建,而非alpine:latest。
- 若无需特定用户,删除
2. 检查Overlay2存储驱动与SELinux配置
RHEL 8上Docker使用Overlay2存储驱动时,SELinux可能限制文件系统访问,导致推送时无法读取overlay2层文件:
- 临时关闭SELinux测试:执行
setenforce 0,重新构建推送镜像,若问题解决,需调整SELinux策略:- 执行
chcon -Rt svirt_sandbox_file_t /var/lib/docker/overlay2为Docker存储目录设置正确的SELinux上下文; - 永久修改可编辑
/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive(需重启系统)。
- 执行
3. 强制重新构建镜像
使用--no-cache参数重新构建,避免缓存的镜像层出现异常:
docker build --no-cache -t jfrogartifactory.com/jenkins/k8stools .
内容的提问来源于stack exchange,提问作者Venu Madhav
相关产品推荐
相关产品推荐

