Note that without GPU acceleration, medium-to-large models will be unusable (especially the GCODE rendering).
services:
prusaslicer:
image: julianneswinoga/prusaslicer-web:latest
volumes:
- <host config dir>:/configs
- <host print dir>:/prints
ports:
- '8077:8080'![]() |
![]() |
If you have multiple GPUs on a system (i.e. integrated Intel graphics and a dedicated GPU) the graphics acceleration in the container could get confused if everything under /dev/dri/ is passed through. Here's a short snippet of figuring out exactly what devices should be passed through to the container. Here I want to pass through the integrated Intel graphics, but I also have an NVidia GPU in the system.
$ lspci
<snip>
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
01:00.0 3D controller: NVIDIA Corporation GP108M [GeForce MX150] (rev a1)
<snip>In this case my intel GPU is on PCIe address 00:02.0.
$ ls -l /dev/dri/by-path/
lrwxrwxrwx 1 root root 8 Dec 18 22:23 pci-0000:00:02.0-card -> ../card1 # Intel GPU
lrwxrwxrwx 1 root root 13 Dec 18 22:23 pci-0000:00:02.0-render -> ../renderD128 # Intel GPU
lrwxrwxrwx 1 root root 8 Dec 18 22:23 pci-0000:01:00.0-card -> ../card0 # NVidia GPU
lrwxrwxrwx 1 root root 13 Dec 18 22:23 pci-0000:01:00.0-render -> ../renderD129 # NVidia GPU/dev/dri/by-path/pci-0000:00:02.0-* point to /dev/dri/card1 and /dev/dri/renderD128. These are the devices that I will pass through to the container.
$ ls -l /dev/dri/
drwxr-xr-x 2 root root 120 Dec 18 22:23 by-path/
crw-rw---- 1 root video 226, 0 Dec 18 22:23 card0
crw-rw---- 1 root video 226, 1 Dec 18 22:23 card1
crw-rw---- 1 root render 226, 128 Dec 18 22:23 renderD128
crw-rw---- 1 root render 226, 129 Dec 18 22:23 renderD129services:
prusaslicer:
image: julianneswinoga/prusaslicer-web:latest
environment:
ENABLEHWGPU: 'true'
devices:
# See above note for which devices to pass through
- /dev/dri/card1:/dev/dri/card1
- /dev/dri/renderD128:/dev/dri/renderD128
- /dev/kfd:/dev/kfd # AMD also requires this device
volumes:
- <host config dir>:/configs
- <host print dir>:/prints
ports:
- '8077:8080'![]() |
![]() |
We need to give the container access to the render group (the group that owns /dev/dri/renderD128), so get the group ID and add it to group_add:
$ getent group render
render:x:993:services:
prusaslicer:
image: julianneswinoga/prusaslicer-web:latest
environment:
ENABLEHWGPU: 'true'
devices:
# See above note for which devices to pass through
- /dev/dri/card1:/dev/dri/card1
- /dev/dri/renderD128:/dev/dri/renderD128
volumes:
- <host config dir>:/configs
- <host print dir>:/prints
group_add:
- 993 # Host `render` group
ports:
- '8077:8080'![]() |
![]() |
- Install NVidia drivers on host
- Install
nvidia-container-toolkit - Reboot after installing
services:
prusaslicer:
image: julianneswinoga/prusaslicer-web:latest
environment:
ENABLEHWGPU: 'true'
runtime: nvidia
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
ports:
- '8077:8080'![]() |
![]() |
| Name | Default value | Explanation |
|---|---|---|
VNC_PASSWORD |
<empty> |
Set a password for to access the VNC web interface. |
ENABLEHWGPU |
<empty> |
Set to true to attempt to run with hardware GPU acceleration. |
| Name | Default value | Explanation |
|---|---|---|
VGL_DISPLAY |
egl |
Manually set the VirtualGL display device. See https://virtualgl.org/vgldoc/2_0/#GLP_Usage for more details. |
NOVNC_PORT |
8080 |
Change the port that NoVNC will listen on. Note that you can also change the port mapping in the container service definition |
SUPD_LOGLEVEL |
debug |
supervisord log level (i.e. the container log output). |
cd docker/
docker buildx bake
docker compose up prusaslicer-web # or prusaslicer-web-{amd,nvidia} - see docker-compose.ymlgit tag x.y.z
git push origin x.y.zBased off of the work from https://github.com/helfrichmichael/prusaslicer-novnc and helfrichmichael/prusaslicer-novnc#23





