aboutsummaryrefslogtreecommitdiff

Podman remote-client tutorial

Introduction

The purpose of the Podman remote-client is to allow users to interact with a Podman "backend" while on a separate client. The command line interface of the remote client is exactly the same as the regular Podman commands with the exception of some flags being removed as they do not apply to the remote-client.

The remote client takes advantage of a client-server model. You need Podman installed on a Linux machine or VM that also has the SSH daemon running. On the local operating system, when you execute a Podman command, Podman connects to the server via SSH. It then connects to the Podman service by using systemd socket activation, and hitting our Rest API. The Podman commands are executed on the server. From the client's point of view, it seems like Podman runs locally.

This tutorial is for running Podman remotely on Linux. If you are using a Mac or a Windows PC, please follow the Mac and Windows tutorial

Obtaining and installing Podman

Client machine

You will need either Podman or the podman-remote client. The difference between the two is that the compiled podman-remote client can only act as a remote client connecting to a backend, while Podman can run local, standard Podman commands, as well as act as a remote client (using podman --remote)

If you already have Podman installed, you do not need to install podman-remote.

You can find out how to install Podman here

If you would like to install only the podman-remote client, it is downloadable from its release description page. You can also build it from source using the make podman-remote

Server Machine

You will need to install Podman on your server machine.

Creating the first connection

Enable the Podman service on the server machine.

Before performing any Podman client commands, you must enable the podman.sock SystemD service on the Linux server. In these examples, we are running Podman as a normal, unprivileged user, also known as a rootless user. By default, the rootless socket listens at /run/user/${UID}/podman/podman.sock. You can enable this socket permanently using the following command:

systemctl --user enable --now podman.socket

You will need to enable linger for this user in order for the socket to work when the user is not logged in:

sudo loginctl enable-linger $USER

This is only required if you are not running Podman as root.

You can verify that the socket is listening with a simple Podman command.

podman --remote info
host:
  arch: amd64
  buildahVersion: 1.16.0-dev
  cgroupVersion: v2
  conmon:
    package: conmon-2.0.19-1.fc32.x86_64

Enable sshd

In order for the Podman client to communicate with the server you need to enable and start the SSH daemon on your Linux machine, if it is not currently enabled.

sudo systemctl enable --now sshd

Setting up SSH

Remote Podman uses SSH to communicate between the client and server. The remote client works considerably smoother using SSH keys. To set up your ssh connection, you need to generate an ssh key pair from your client machine. NOTE: in some instances, using a rsa key will cause connection issues, be sure to create an ed25519 key.

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519

Your public key by default should be in your home directory under ~/.ssh/id_ed25519.pub. You then need to copy the contents of id_ed25519.pub and append it into ~/.ssh/authorized_keys on the Linux server. You can automate this using ssh-copy-id:

ssh-copy-id -i ~/.ssh/id_ed25519.pub 192.168.122.1

If you do not wish to use SSH keys, you will be prompted with each Podman command for your login password.

Using the client

Note: podman-remote is equivalent to podman --remote here, depending on what you have chosen to install.

The first step in using the Podman remote client is to configure a connection.

You can add a connection by using the podman-remote system connection add command.

podman-remote system connection add myuser --identity ~/.ssh/id_ed25519 ssh://192.168.122.1/run/user/1000/podman/podman.sock

This will add a remote connection to Podman and if it is the first connection added, it will mark the connection as the default. You can observe your connections with podman-remote system connection list:

podman-remote system connection list
Name      Identity         URI
myuser*   id_ed25519       ssh://myuser@192.168.122.1/run/user/1000/podman/podman.sock

Now we can test the connection with podman info:

podman-remote info
host:
  arch: amd64
  buildahVersion: 1.16.0-dev
  cgroupVersion: v2
  conmon:
    package: conmon-2.0.19-1.fc32.x86_64

Podman-remote has also introduced a “--connection” flag where you can use other connections you have defined. If no connection is provided, the default connection will be used.

podman-remote system connection --help

Wrap up

You can use the Podman remote clients to manage your containers running on a Linux server. The communication between client and server relies heavily on SSH connections and the use of SSH keys are encouraged. Once you have Podman installed on your remote client, you should set up a connection using podman-remote system connection add which will then be used by subsequent Podman commands.

Troubleshooting

See the Troubleshooting document if you run into issues.

History

Adapted from the Mac and Windows tutorial