web-dev-qa-db-ja.com

コンテナー内からpodmanを実行する方法は?

CI/CDパイプラインを実行するコンテナーとして podman を実行したい。しかし、私は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

Jenkins Kubernetesプラグイン を使用して、Kubernetesクラスター内のコンテナーとして実行されるCI/CDパイプラインを記述しています。私はDocker-in-Dockerコンテナーを使用してdocker buildおよびdocker Pushコマンドを実行するパイプラインを作成することに成功しています。

ただし、コンテナー内でDockerクライアントとDockerデーモンを実行すると、CI/CD環境が非常に肥大化し、構成が困難になり、作業に理想的ではなくなります。したがって、太字のDockerデーモンを使用せずにDockerfilesからDockerイメージを構築するために podman を使用できると考えました。

問題は、podmanが非常に新しいため、誰もこれを試したことがなく、適切に実行するのに十分なポッドマンの専門家でもないことです。

したがって、 buntuのpodmanインストール手順 を使用して、次の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

そのため、イメージを作成して次のように実行しました。

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

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

次に、実行中のコンテナでこのコマンドを実行すると、エラーが発生します。

$ 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

私が持っていたUbuntu 16.04マシンにpodmanをインストールし、同じpodman infoコマンドを実行すると、期待した結果が得られました。

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

誰かがこのエラーを修正してポッドマンをコンテナから動作させる方法を知っていますか?

13
Fabio Gomez

Mihaiからの提案はinfoで成功していますが、たとえばrun --rm docker.io/library/hello-worldエラーが発生します:

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

この問題を解決するには、イメージに非rootユーザーを設定し、コンテナーを特権モードで実行します。これは、DinDがすでに実行できるため、演習の目的に反するものです。

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"]

使用されます

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