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?
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