不是用 Podman 来打包编译镜像么,为啥还需要 containerd ?

    Feynman

    这里只是描述基础环境是 containerd,以它为例进行的测试,还应该测试一下cri-o、isula等。

    shaowenchen 这块作用类似于docker image 本地缓存吧。可以说明一下,或提供个使用pvc的例子

    1 个月 后

    为什么要用特权模式呢?是有什么地方有限制吗?

    您好,我按照上述去构建流水线,其中Dockerfile中包含RUN语句,镜像就会构建失败,并提示:

    + docker build -f Dockerfile.future_k_line -t demo .
    STEP 1: FROM python:3.9.0
    STEP 2: ENV SOURCEDIR /opt
    --> Using cache 8b24536d469dc34fc80ce772af054dd5bc41c3cdb3114e62cfe3254b8bf49bcc
    --> 8b24536d469
    STEP 3: COPY . $SOURCEDIR/aa
    --> 4f6ed9e5258
    STEP 4: WORKDIR $SOURCEDIR/aa
    --> c1b5512bc5a
    STEP 5: RUN rm -rf /var/lib/apt/lists/*
    error running container: error creating container for [/bin/sh -c rm -rf /var/lib/apt/lists/*]: time="2021-04-01T14:11:36Z" level=error msg="systemd cgroup flag passed, but systemd support for managing cgroups is not available"
    : exit status 1
    time="2021-04-01T14:11:36Z" level=error msg="unable to write build event: \"write unixgram @77635->/run/systemd/journal/socket: sendmsg: no such file or directory\""
    Error: error building at STEP "RUN rm -rf /var/lib/apt/lists/*": error while running runtime: exit status 1
    script returned exit code 125

    目前在github上podman的issue中有类似问题,但并未提供解决方法,在google上也未能找到。

    参考报错信息,是由于镜像默认是systemd,无法去cgroup而导致,但没有什么头绪。

    • Wmm 回复了此帖

      您好,参照上面的文档,使用podman去构建镜像和推送后,最后一个步骤需要部署到k8s集群中,需要给crictl配置私有镜像仓库,请问您这边有具体的配置详情吗?
      我参照官方文档 https://github.com/containerd/containerd/blob/master/docs/cri/registry.md ,配置后重启containerd,通过crictl info能看到配置的镜像仓库和认证的账号密码,但去拉取镜像,就提示401 未认证,debug显示Auth为nil。
      若使用crictl –creds 指定账号密码,则可以拉取成功,是否是我漏配置了什么呢?

        leksas

        可能是需要挂载配置文件,运行环境和主机环境不是一个环境。直接用 Podman 不好使么?

        用podman构建镜像和推送镜像是ok的,但是k8s集群里面是用的crictl,它没有凭据去私有仓库中拉取镜像,目前已通过配置config.toml解决了。

        1 年 后

        [未知用户] 要在devops-jenkins对应的节点服务器上安装podman. 不用流水线实时命令就好了

        22 天 后

        有几个疑问:

        1. ln -s /usr/bin/podman /usr/bin/docker,这样在 sh ’docker ….'这样的命令中是会报docker: command not found 的错误的
        2. 安装podman是不是就不再像docker那样使用K8s node上的docker了?而是直接使用这个容器里的podman来工作。因为我看到没有像docker那样把K8s node上的contaierd的socket挂载进去

        [未知用户] 这里不是挂载类似docker的socket来使用K8s node上的containerd么?只是做存储用么?

        1 年 后
        2 个月 后

        leksas 您好,我自己打包的镜像也报这个错,有什么解决办法吗?