π³ Docker over SSHΒΆ
The solver runs inside a Docker container on a remote Linux host,
managed by a Docker daemon reached through SSH. Two UI modes cover the
two ways to provide SSH credentials: Custom (explicit fields) and
Command (parsed from a raw ssh ... string).
Where each piece lives, and how the add-on reaches it. Blue solid
arrows carry lifecycle commands (container start/stop, exec, port
check). Purple dashed arrows carry the TCP connection to server.py,
which rides an SSH tunnel into the containerβs published port on the
remoteβs localhost. For the local variant where the daemon and
container run on the Blender machine, see Docker (Local).ΒΆ
When to Use ItΒΆ
A GPU host runs Docker for you and you reach it over SSH.
Your cluster administrator hands you a container instead of shell access on the bare host.
Multiple solvers share one remote GPU host and you want each project isolated.
Setup - Custom ModeΒΆ
The SSH fields from the SSH (Direct) page are combined with the Docker fields: the add-on opens an SSH session to the remote host and runs every Docker command there.
Set Server Type to
Docker over SSH.Fill Host / Port / User / SSH Key as in SSH Custom mode β these locate the remote host that runs the Docker daemon.
Fill Container with the container name on the remote daemon (e.g.
ppf-dev). The add-on runsdocker execagainst this name over the SSH session.Fill Container Path with the working directory inside that container (default
/root/ppf-contact-solver). This path is not interpreted on the Blender host or on the remote hostβs filesystem β it is the path seen from inside the container, whereserver.pylives.Set Docker Port to the TCP port
server.pylistens on inside the container.Click Connect. The add-on verifies that the container exists on the remote host and starts it if it is stopped.
Backend Communicator with Server Type set to Docker over SSH Command. The SSH Command field replaces the per-field SSH inputs
(in Custom mode you would see Host / Port / User / SSH
Key instead). Container, Container Path, and Docker Port
are the same fields as in Docker (Local). Connect is
highlighted.ΒΆ
Field |
Description |
|---|---|
Container |
Container name on the remote Docker daemon. Must already exist. |
Container Path |
Working directory inside the remote container that holds |
Docker Port |
Port inside the container where |
Warning
The server port must be published on the container (-p 9090:9090 or
equivalent in your compose file). Before Start Server, the add-on
checks the port mapping on the remote host and refuses to continue if
the port is not exposed β the error text tells you exactly which port
and container failed. You must fix this on the container side; the
add-on cannot publish ports on a container that is already created.
Setup - Command ModeΒΆ
Identical to Custom Mode, but the SSH parameters come from a pasted command instead of separate fields.
Set Server Type to
Docker over SSH Command.Paste the SSH command into SSH Command, e.g.
ssh -p 2222 -i ~/.ssh/gpu_key alice@gpu01.example.com. See the SSH Command section for the parser rules.Fill Container with the container name on the remote daemon (the same field as in Custom Mode β it is not parsed from the command string).
Fill Container Path with the working directory inside that container (where
server.pylives). This is also a separate field and is never derived from the SSH command.Set Docker Port and click Connect.
The Container and Container Path fields behave exactly as in Custom Mode β only the host / port / user / key path are sourced from the pasted command.
Installing paramiko and docker-pyΒΆ
Docker over SSH needs both the paramiko and docker Python packages.
The main panel shows Install Paramiko and Install Docker buttons
when either is missing; both install into the add-onβs private library
directory.
TroubleshootingΒΆ
Container 'X' does not exist.- the name is wrong or the container was removed on the remote. Rundocker ps -aon the remote to see what is actually there.Error starting container 'X'- the daemon returned a non-zero exit or the remote user lacksdockergroup membership.Server startup timed out. - the container started but
server.pydid not become ready within 16 seconds. Checkserver.loginside the directory set in Container Path; the panel prints the last 20 lines automatically.
Under the hood
Transport
An SSH session is opened to the remote host and every Docker command
is wrapped in docker exec -w <cwd> <container> ... on that session.
During connect the add-on checks that the container exists and starts
it if it is stopped; a missing container aborts the connect.
Port publication check
Before Start Server the add-on runs
docker port <container> <port>
on the remote SSH host. A non-zero exit code aborts with:
Docker port 9090 is not exposed on container βppf-devβ. Please expose the port with β-p 9090:9090β when starting the container.
Fix this on the container side by re-running docker run -p 9090:9090
(or editing your compose.yaml); the add-on cannot publish ports on
an existing container.
Server startup path
Docker over SSH uses the same Unix server-launch path as the SSH and
Local backends (see Connections - Under the hood):
a small script inside the container launches server.py on the
configured port and the UI waits up to 16 s for readiness.