Skip to main content



GPUX Storage

GPUX has native storage exposed inside the running container on a unix socket. The socket is passed through as a volume and located at /gpux_api. You can use it to upload or download a file from inside the container to be accessible outside. Any file uploaded will return the sha1 it hashes to.

# Download 
curl --unix-socket /gpux_api "http://dontcare/api/file/download/$SHA1" --output source.blend
# Upload 
SHA1=$(curl -s --unix-socket /gpux_api --data-binary "http://dontcare/api/file/upload/" | jq -r '.sha1')

Persistent Storage

GPUX containers also have persistent storage mounted based on the signing public key of the job. Currently persistent storage is node local and does not carry over between nodes. The persistent storage is mounted onto /gpux_usr/, anything put in this folder will be shared with all the containers running off the same public key on the same node, in real time.

Job local storage is mounted on /gpux_job/, this storage gets purged when the job is deleted.


Persistent Storage and GPUX Storage is node local only. For now..

Port Forwarding

GPUX forwards ports using subdomain forwarding (similar to IPFS). To access port 8080 on job 061i6uku7ie62tg1 which is on node you would simply visit Note the http part currently https is not fully supported (due to complexities of doublewild card certificates) but it will be in future.


HTTPS for port forwarding is not fully supported. For now..

Cloudflare Tunnel

If we want to use HTTPS or the node is behind a firewall we can run an anonymous CloudFlare reverse tunnel.


#install cftunnel
wget --no-verbose \
&& dpkg -i cloudflared-linux-amd64.deb \
&& rm cloudflared-linux-amd64.deb

#run the tunnel and point it to port 8080 on localhost
cloudflared tunnel --url "http://localhost:8080"

Automatic Detection

Containers automatically pick up a running cloudflare tunnel if it starts within the first 30 seconds and set a key on the job details called cftunnel.

Standard Template

FROM ubuntu:22.04
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get install -y wget locales apt-transport-https apt-utils \
&& apt-get clean && apt-get autoremove --yes

RUN echo "en_US UTF-8" >> /etc/locale.gen && locale-gen

WORKDIR "/root"

#install cftunnel
RUN wget --no-verbose \
&& dpkg -i cloudflared-linux-amd64.deb \
&& rm cloudflared-linux-amd64.deb

#install python
RUN apt-get update \
&& apt-get install -y python3 python3-pip \
&& apt-get clean && apt-get autoremove --yes

#setup init because cftunnel
RUN echo '#!/bin/bash' >> / \
&& echo 'cloudflared tunnel --url "http://localhost:8000" &' >> / \
&& echo 'touch imafile' >> / \
&& echo 'python3 -m http.server' >> / \
&& chmod +x /

CMD ["/"]

Save the above into a directory as Dockerfile.

podman build --tag gpuxdemo .
podman run gpuxdemo

2022-06-15T17:13:53Z INF +--------------------------------------------------------------------------------------------+
2022-06-15T17:13:53Z INF | Your quick Tunnel has been created! Visit it at (it may take some time to be reachable): |
2022-06-15T17:13:53Z INF | |
2022-06-15T17:13:53Z INF +--------------------------------------------------------------------------------------------+

Now visit the tunnel URL.