如何从容器内部运行podman?

Fab*_*mez 8 containers jenkins docker kubernetes podman

我想将podman作为运行CI / CD管道的容器运行。但是,我不断从podman容器中收到此错误:

$ podman info
ERRO[0000] 'overlay' is not supported over overlayfs
Error: could not get runtime: 'overlay' is not supported over overlayfs: backing file system is unsupported for this graph driver
Run Code Online (Sandbox Code Playgroud)

我正在使用Jenkins Kubernetes插件编写在Kubernetes集群中作为容器运行的CI / CD管道。我已经成功编写了使用Docker-in-Docker容器运行docker builddocker push命令的管道。

但是,在容器内运行Docker客户端和Docker Daemon会使CI / CD环境变得非常膨胀,难以配置,并且使用起来并不理想。因此,我认为我可以使用podman从Dockerfiles构建Docker映像,而无需使用胖Docker守护程序。

问题是podman太新了,以至于我之前从未见过有人尝试过这样做,也没有足够的podman专家来正确执行此操作。

因此,使用针对Ubuntupodman安装说明,我创建了以下Dockerfile:

FROM ubuntu:16.04

RUN apt-get update -qq \
    && apt-get install -qq -y software-properties-common uidmap \
    && add-apt-repository -y ppa:projectatomic/ppa \
    && apt-get update -qq \
    && apt-get -qq -y install podman

# To keep it running
CMD tail -f /dev/null
Run Code Online (Sandbox Code Playgroud)

因此,我构建了图像并按如下所示运行它:

FROM ubuntu:16.04

RUN apt-get update -qq \
    && apt-get install -qq -y software-properties-common uidmap \
    && add-apt-repository -y ppa:projectatomic/ppa \
    && apt-get update -qq \
    && apt-get -qq -y install podman

# To keep it running
CMD tail -f /dev/null
Run Code Online (Sandbox Code Playgroud)

然后在正在运行的容器上运行此命令时,出现错误:

# Build
docker build -t podman:ubuntu-16.04 .

# Run
docker run --name podman -d podman:ubuntu-16.04
Run Code Online (Sandbox Code Playgroud)

我在装有Ubuntu 16.04的计算机上安装了podman,并运行了与podman info获得预期结果相同的命令:

$ docker exec -ti podman bash -c "podman info"

ERRO[0000] 'overlay' is not supported over overlayfs
Error: could not get runtime: 'overlay' is not supported over overlayfs: backing file system is unsupported for this graph driver
Run Code Online (Sandbox Code Playgroud)

有谁知道我该如何解决该错误并使Podman从容器中工作?

Mih*_*hai 5

您的Dockerfile也应该安装iptables:

FROM ubuntu:16.04

RUN apt-get update -qq \
    && apt-get install -qq -y software-properties-common uidmap \
    && add-apt-repository -y ppa:projectatomic/ppa \
    && apt-get update -qq \
    && apt-get -qq -y install podman \
    && apt-get install -y iptables

# To keep it running
CMD tail -f /dev/null
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令运行命令:

docker run -ti --rm podman:test bash -c "podman --storage-driver=vfs info"
Run Code Online (Sandbox Code Playgroud)

这应该给您您期望的答复。

  • 它对我不起作用......我在哪里可以找到一个简单的例子来“从容器内运行 podman”? (3认同)
  • 还应该注意的是,存储驱动程序 VFS 的性能明显较低,并且占用更多空间。更多信息:https://docs.docker.com/storage/storagedriver/vfs-driver/ (2认同)
  • 是的,但你宁愿有一个更慢的管道而不是作为 root 运行它 (2认同)
  • 在 Mac 上执行此示例会产生一个错误,输出为 `podman info`:`ERRO[0000] 无法写入系统事件:"write unixgram @00006->/run/systemd/journal/socket: sendmsg: no such file 或者目录”`。当我实际尝试运行容器“podman --storage-driver=vfs run docker.io/hello-world”时,我收到更多错误。 (2认同)