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 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 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.json and restart the engine with orb restart docker.
{ "registry-mirrors": ["<mirror_addr>"] }
Try some integration tests!
make test
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/docker file 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/docker file 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 ~/.bashrc or 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.sock
If 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
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.
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"