Run the Astro CLI using Podman
The Astro CLI requires a container management engine to run Apache Airflow components on your local machine and deploy to Astro. For example, the astro dev start
and astro deploy
commands both require containers.
By default, the Astro CLI uses Docker as its container management engine. However, if your organization uses Podman to run and manage containers, you can configure the Astro CLI to use it instead. Podman is a secure, free, and open source alternative to Docker that doesn't require root access and orchestrates containers without using a centralized daemon.
Configure the Astro CLI to use Podman
- Mac
- WSL2 on Windows
- Linux
Set up Podman on a Mac operating system so you can run Apache Airflow locally and deploy to Astro with Podman containers.
Prerequisites
- Podman 3 or later. See Getting started with Podman.
- A running Podman machine with at least 4 GiB of RAM. To confirm that Podman is running, run
podman ps
. - (M1 MacOS) Turn on rootful mode for Podman by using
podman machine set --rootful
. A Podman bug currently causes issues with volumes when running in rootless mode on M1.
If you receive an error after running podman ps
, there is likely a problem with your Podman connection. You might need to set the system-level DOCKER_HOST
environment variable to be the location of your Podman service socket:
-
Run the following command to identify the connection URI for
podman-machine-default
:podman system connection ls
The output should look like the following:
podman-machine-default* /Users/user/.ssh/podman-machine-default ssh://core@localhost:54523/run/user/1000/podman/podman.sock
podman-machine-default-root /Users/user/.ssh/podman-machine-default ssh://root@localhost:54523/run/podman/podman.sock -
Copy the value in the
URI
column frompodman-machine-default*
. This is typicallyunix:///run/podman/podman.sock
, but it can vary based on your installation. -
Set your
DOCKER_HOST
environment variable to the value of the URI.
Setup
-
Run the following command to confirm that Podman has access to Astro images at
docker.io
:podman run --rm -it postgres:12.6 whoami
If this command fails, use Podman Desktop to change Podman's default image registry location to
docker.io
. See Provide pre-defined registries.
Set up Podman on Windows so you can run Apache Airflow locally and deploy to Astro with Podman containers.
Prerequisites
- Podman 3 or later installed on Windows Subsystem for Linux version 2 (WSL 2) using Ubuntu 22.04 or later. See Install Linux on Windows with WSL and Getting started with Podman.
- A running Podman machine with at least 4 GiB of RAM. To confirm that Podman is running, run
podman ps
in your Linux terminal. - The Astro CLI Linux distribution installed on WSL 2. See Install the Astro CLI on Linux.
If you receive an error after running podman ps
, there is likely a problem with your Podman connection. You might need to set the system-level DOCKER_HOST
environment variable to be the location of your Podman service socket:
-
In a WSL 2 terminal, run the following command to identify the connection URI for
podman-machine-default
:podman system connection ls
The output should look like the following:
podman-machine-default* /Users/user/.ssh/podman-machine-default ssh://core@localhost:54523/run/user/1000/podman/podman.sock
podman-machine-default-root /Users/user/.ssh/podman-machine-default ssh://root@localhost:54523/run/podman/podman.sock -
Copy the value in the
URI
column frompodman-machine-default*
. This is typicallyunix:///run/podman/podman.sock
, but it can vary based on your installation. -
Set your
DOCKER_HOST
environment variable to the value of the URI.
Setup
-
In a WSL 2 terminal, run the following command to confirm that Podman has access to Astro images at
docker.io
:podman run --rm -it postgres:12.6 whoami
If this command fails, run the following command to change Podman's default image registry location to
docker.io
:cat << EOF | sudo tee -a /etc/containers/registries.conf.d/shortnames.conf
"postgres" = "docker.io/postgres"
EOF
Set up Podman on Linux so you can run Apache Airflow locally and deploy to Astro with Podman containers.
Prerequisites
- Podman 3 or later. See Getting started with Podman.
- A running Podman machine with at least 4 GiB of RAM. To confirm that Podman is running, run
podman ps
.
If you receive an error after running podman ps
, there is likely a problem with your Podman connection. You might need to set the system-level DOCKER_HOST
environment variable to be the location of your Podman service socket:
-
Run the following command to identify the connection URI for
podman-machine-default
:podman system connection ls
The output should look like the following:
podman-machine-default* /Users/user/.ssh/podman-machine-default ssh://core@localhost:54523/run/user/1000/podman/podman.sock
podman-machine-default-root /Users/user/.ssh/podman-machine-default ssh://root@localhost:54523/run/podman/podman.sock -
Copy the value in the
URI
column frompodman-machine-default*
. This is typicallyunix:///run/podman/podman.sock
, but it can vary based on your installation. -
Set your
DOCKER_HOST
environment variable to the value of the URI.
Setup
-
Run the following command to confirm that Podman has access to Astro images at
docker.io
:podman run --rm -it postgres:12.6 whoami
If this command fails, run the following command to change Podman's default image registry location to
docker.io
:cat << EOF | sudo tee -a /etc/containers/registries.conf.d/shortnames.conf
"postgres" = "docker.io/postgres"
EOF
For CLI versions 1.30.0 and earlier
Run the following command to set Podman as your container management engine for the Astro CLI:
astro config set -g container.binary podman
If you're using Podman 3, additionally run the following command:
astro config set -g duplicate_volumes false
Troubleshooting
SHELL is not supported for OCI image format
WARN[0010] SHELL is not supported for OCI image format, [/bin/bash -o pipefail -e -u -x -c] will be ignored. Must use `docker` format
This error can occur when the CLI tries to build your Astro Runtime image using Podman.
To resolve this issue, run the following command to set the BUILDAH_FORMAT
environment variable on your machine:
export BUILDAH_FORMAT=docker
Cannot connect to the Docker daemon
Error: error creating docker-compose project: Cannot connect to the Docker daemon at unix:///Users/[YOUR.USER]/.docker/run/docker.sock. Is the docker daemon running?
Ensure Docker Compatibility is enabled in Settings > Preferences > Experimental (Docker Compatibility) and Docker CLI Context is set to unix://var/run/docker.sock
.
"docker-credential-desktop": executable file not found
Error: error reading credentials: error getting credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH, out: ``
This error can occur when Docker used to be installed, but no longer exists on the system. When podman runs, it is checking $HOME/.docker/config.json
for registered credentials stores.
To resolve the issue, delete the corresponding Docker configuration at $HOME/.docker
from the system or install Docker again.
Further info can be found here.
Switch between Docker and Podman
After you set up the Astro CLI to use Podman on your local machine, the CLI automatically runs Podman containers whenever you run a command that requires them. To revert to the default behavior and run CLI commands in Docker containers, run the following command:
astro config set container.binary docker
If you need to switch back to using Podman again, run the following command:
astro config set container.binary podman