web-dev-qa-db-fra.com

Comment exécuter podman depuis l'intérieur d'un conteneur?

Je veux exécuter podman comme conteneur pour exécuter les pipelines CI/CD. Cependant, je continue à recevoir cette erreur du conteneur 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

J'utilise le plugin Jenkins Kubernetes pour écrire des pipelines CI/CD qui s'exécutent en tant que conteneurs dans un cluster Kubernetes. J'ai réussi à écrire des pipelines qui utilisent un conteneur Docker-in-Docker pour exécuter docker build et docker Push commandes.

Cependant, l'exécution d'un client Docker et d'un démon Docker à l'intérieur d'un conteneur rend l'environnement CI/CD très gonflé, difficile à configurer et tout simplement pas idéal pour travailler avec. J'ai donc pensé que je pourrais utiliser podman pour créer des images Docker à partir de Dockerfiles sans utiliser un gros démon Docker.

Le problème est que podman est tellement nouveau que je n'ai vu personne tenter cela auparavant, et je ne suis pas assez expert en podman pour l'exécuter correctement.

Donc, en utilisant les instructions d'installation de podman pour Ubunt j'ai créé le Dockerfile suivant:

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

J'ai donc construit l'image et l'ai exécutée comme suit:

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

# Run
docker run --name podman -d podman:ubuntu-16.04

Ensuite, lors de l'exécution de cette commande sur le conteneur en cours d'exécution, j'obtiens une erreur:

$ 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

J'installe podman sur une machine Ubuntu 16.04 que j'avais et j'ai exécuté le même podman info commande J'ai obtenu les résultats attendus:

Host:
  BuildahVersion: 1.8-dev
  Conmon:
    package: 'conmon: /usr/libexec/crio/conmon'
    path: /usr/libexec/crio/conmon
    version: 'conmon version , commit: '
  Distribution:
    distribution: ubuntu
    version: "16.04"
  MemFree: 2275770368
  MemTotal: 4142137344
  OCIRuntime:
    package: 'cri-o-runc: /usr/lib/cri-o-runc/sbin/runc'
    path: /usr/lib/cri-o-runc/sbin/runc
    version: 'runc version spec: 1.0.1-dev'
  SwapFree: 2146758656
  SwapTotal: 2146758656
  Arch: AMD64
  cpus: 2
  hostname: jumpbox-4b3620b3
  kernel: 4.4.0-141-generic
  os: linux
  rootless: false
  uptime: 222h 46m 33.48s (Approximately 9.25 days)
insecure registries:
  registries: []
registries:
  registries:
  - docker.io
store:
  ConfigFile: /etc/containers/storage.conf
  ContainerStore:
    number: 0
  GraphDriverName: overlay
  GraphOptions: null
  GraphRoot: /var/lib/containers/storage
  GraphStatus:
    Backing Filesystem: extfs
    Native Overlay Diff: "true"
    Supports d_type: "true"
    Using metacopy: "false"
  ImageStore:
    number: 15
  RunRoot: /var/run/containers/storage
  VolumePath: /var/lib/containers/storage/volumes

Est-ce que quelqu'un sait comment je peux corriger cette erreur et faire fonctionner podman à partir d'un conteneur?

13
Fabio Gomez

La suggestion de mihai réussit pour info mais dès que j'essaye, par exemple, run --rm docker.io/library/hello-world Je reçois une erreur:

error creating network namespace for container …: mount --make-rshared /var/run/netns failed: "operation not permitted"
failed to mount shm tmpfs "/var/lib/containers/storage/vfs-containers/…/userdata/shm": operation not permitted

J'ai seulement réussi à résoudre ce problème en définissant un utilisateur non root pour l'image, puis en exécutant le conteneur en mode privilégié, ce qui va à l'encontre du but de l'exercice puisque DinD pouvait déjà le faire:

FROM ubuntu:18.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

RUN adduser --disabled-login --gecos test test

USER test

ENTRYPOINT ["podman", "--storage-driver=vfs"]
CMD ["info"]

utilisé comme

docker build -t podman:test .
docker run --rm --privileged podman:test run --rm docker.io/library/hello-world
0
Jesse Glick