Container Runtimes
Iceberg-rust uses containers for integration tests, where docker and docker compose start containers for MinIO and various catalogs. You can use any of the following container runtimes.
Docker Desktop
Docker Desktop is available for macOS, Windows, and Linux.
-
Install Docker Desktop by downloading the installer or using Homebrew on macOS.
brew install --cask docker -
Launch Docker Desktop and complete the setup.
-
Verify the installation.
docker --version docker compose version -
Try some integration tests!
make test
OrbStack (macOS)
OrbStack is a lightweight alternative to Docker Desktop on macOS.
-
Install OrbStack by downloading the installer or using Homebrew.
brew install orbstack -
Migrate Docker data (if switching from Docker Desktop).
orb migrate docker -
(Optional) Add registry mirrors.
You can edit the config directly at
~/.orbstack/config/docker.jsonand restart the engine withorb restart docker.{ "registry-mirrors": ["<mirror_addr>"] } -
Try some integration tests!
make test
Podman
Podman is a daemonless container engine. The instructions below set up "rootful podman" with docker's official docker-compose plugin.
-
Have podman v4 or newer.
$ podman --version podman version 4.9.4-rhel -
Create a docker wrapper script:
Create a fresh
/usr/bin/dockerfile and add the below contents:#!/bin/sh [ -e /etc/containers/nodocker ] || \ echo "Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg." >&2 exec sudo /usr/bin/podman "$@"Set new
/usr/bin/dockerfile to executable.sudo chmod +x /usr/bin/docker -
Install the docker compose plugin. Check for successful installation.
$ docker compose version Docker Compose version v2.28.1 -
Append the below to
~/.bashrcor equivalent shell config:export DOCKER_HOST=unix:///run/podman/podman.sock -
Start the "rootful" podman socket.
sudo systemctl start podman.socket sudo systemctl status podman.socket -
Check that the following symlink exists.
$ ls -al /var/run/docker.sock lrwxrwxrwx 1 root root 27 Jul 24 12:18 /var/run/docker.sock -> /var/run/podman/podman.sockIf the symlink does not exist, create it.
sudo ln -s /var/run/podman/podman.sock /var/run/docker.sock -
Check that the docker socket is working.
sudo curl -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping -
Try some integration tests!
cargo test -p iceberg --test file_io_s3_test
Note on rootless containers
As of podman v4, "To be succinct and simple, when running rootless containers, the container itself does not have an IP address". This causes issues with iceberg-rust's integration tests, which rely upon IP-addressable containers via docker-compose. As a result, podman "rootful" containers are required to ensure containers have IP addresses.
Podman troubleshooting
Error: short-name "apache/iceberg-rest-fixture" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"
Fix: Add or modify the /etc/containers/registries.conf file:
[[registry]]
prefix = "docker.io"
location = "docker.io"