|
| 1 | +**Modern GUI desktop apps may have compatibility issues with the latest Docker syscall restrictions. You can use Docker with the `--security-opt seccomp=unconfined` setting to allow these syscalls on hosts with older Kernels or libseccomp versions.** |
| 2 | + |
| 3 | +### Security |
| 4 | + |
| 5 | +{{ "This container provides privileged access to the host system. Do not expose it to the Internet unless you have secured it properly." | admonition(flavour=markdown, severity="warning") }} |
| 6 | + |
| 7 | +**HTTPS is required for full functionality.** Modern browser features such as WebCodecs, used for video and audio, will not function over an insecure HTTP connection. |
| 8 | + |
| 9 | +By default, this container has no authentication. The optional `CUSTOM_USER` and `PASSWORD` environment variables enable basic HTTP auth, which is suitable only for securing the container on a trusted local network. For internet exposure, we strongly recommend placing the container behind a reverse proxy, such as [SWAG](https://github.com/linuxserver/docker-swag), with a robust authentication mechanism. |
| 10 | + |
| 11 | +The web interface includes a terminal with passwordless `sudo` access. Any user with access to the GUI can gain root control within the container, install arbitrary software, and probe your local network. |
| 12 | + |
| 13 | +### Options in all Selkies-based GUI containers |
| 14 | + |
| 15 | +This container is based on [Docker Baseimage Selkies](https://github.com/linuxserver/docker-baseimage-selkies), which provides the following environment variables and run configurations to customize its functionality. |
| 16 | + |
| 17 | +#### Optional Environment Variables |
| 18 | + |
| 19 | +| Variable | Description | |
| 20 | +| :----: | --- | |
| 21 | +| `CUSTOM_PORT` | Internal HTTP port. Defaults to `{% if external_http_port is defined %}{{ external_http_port }}{% else %}3000{% endif %}`. | |
| 22 | +| `CUSTOM_HTTPS_PORT` | Internal HTTPS port. Defaults to `{% if external_https_port is defined %}{{ external_https_port }}{% else %}3001{% endif %}`. | |
| 23 | +| `CUSTOM_USER` | Username for HTTP Basic Auth. Defaults to `abc`. | |
| 24 | +| `PASSWORD` | Password for HTTP Basic Auth. If unset, authentication is disabled. | |
| 25 | +| `SUBFOLDER` | Application subfolder for reverse proxy configurations. Must include leading and trailing slashes, e.g., `/subfolder/`. | |
| 26 | +| `TITLE` | Page title displayed in the web browser. Defaults to "Selkies". | |
| 27 | +| `START_DOCKER` | If set to `false`, the privileged Docker-in-Docker setup will not start automatically. | |
| 28 | +| `DISABLE_IPV6` | Set to `true` to disable IPv6 support in the container. | |
| 29 | +| `LC_ALL` | Sets the container's locale, e.g., `fr_FR.UTF-8`. | |
| 30 | +| `NO_DECOR` | If set, applications will run without window borders, suitable for PWA usage. | |
| 31 | +| `NO_FULL` | If set, applications will not be automatically fullscreened. | |
| 32 | +| `DISABLE_ZINK` | If set, Zink-related environment variables will not be configured when a video card is detected. | |
| 33 | +| `WATERMARK_PNG` | Full path to a watermark PNG file inside the container, e.g., `/usr/share/selkies/www/icon.png`. | |
| 34 | +| `WATERMARK_LOCATION` | Integer specifying the watermark location: `1` (Top Left), `2` (Top Right), `3` (Bottom Left), `4` (Bottom Right), `5` (Centered), `6` (Animated). | |
| 35 | + |
| 36 | +#### Optional Run Configurations |
| 37 | + |
| 38 | +| Argument | Description | |
| 39 | +| :----: | --- | |
| 40 | +| `--privileged` | Starts a Docker-in-Docker (DinD) environment. For better performance, mount the Docker data directory from the host, e.g., `-v /path/to/docker-data:/var/lib/docker`. | |
| 41 | +| `-v /var/run/docker.sock:/var/run/docker.sock` | Mounts the host's Docker socket to manage host containers from within this container. | |
| 42 | + |
| 43 | +### Language Support - Internationalization |
| 44 | + |
| 45 | +To launch the desktop session in a different language, set the `LC_ALL` environment variable. For example: |
| 46 | + |
| 47 | +* `-e LC_ALL=zh_CN.UTF-8` - Chinese |
| 48 | +* `-e LC_ALL=ja_JP.UTF-8` - Japanese |
| 49 | +* `-e LC_ALL=ko_KR.UTF-8` - Korean |
| 50 | +* `-e LC_ALL=ar_AE.UTF-8` - Arabic |
| 51 | +* `-e LC_ALL=ru_RU.UTF-8` - Russian |
| 52 | +* `-e LC_ALL=es_MX.UTF-8` - Spanish (Latin America) |
| 53 | +* `-e LC_ALL=de_DE.UTF-8` - German |
| 54 | +* `-e LC_ALL=fr_FR.UTF-8` - French |
| 55 | +* `-e LC_ALL=nl_NL.UTF-8` - Netherlands |
| 56 | +* `-e LC_ALL=it_IT.UTF-8` - Italian |
| 57 | + |
| 58 | +{% if show_nvidia is defined %}### Nvidia GPU Support |
| 59 | + |
| 60 | +**Note: Nvidia support is not available for Alpine-based images.** |
| 61 | + |
| 62 | +Nvidia GPU support is available by leveraging Zink for OpenGL. When a compatible Nvidia GPU is passed through, it will also be **automatically utilized for hardware-accelerated video stream encoding** (using the `x264enc` full-frame profile), significantly reducing CPU load. |
| 63 | + |
| 64 | +Enable Nvidia support with the following runtime flags: |
| 65 | + |
| 66 | +| Flag | Description | |
| 67 | +| :----: | --- | |
| 68 | +| `--gpus all` | Passes all available host GPUs to the container. This can be filtered to specific GPUs. | |
| 69 | +| `--runtime nvidia` | Specifies the Nvidia runtime, which provides the necessary drivers and tools from the host. | |
| 70 | + |
| 71 | +For Docker Compose, you must first configure the Nvidia runtime as the default on the host: |
| 72 | + |
| 73 | +``` |
| 74 | +sudo nvidia-ctk runtime configure --runtime=docker --set-as-default |
| 75 | +sudo systemctl restart docker |
| 76 | +``` |
| 77 | + |
| 78 | +Then, assign the GPU to the service in your `compose.yaml`: |
| 79 | + |
| 80 | +``` |
| 81 | +services: |
| 82 | + {{ project_name }}: |
| 83 | + image: lscr.io/{{ lsio_project_name_short }}/{{ project_name }}:{{ release_tag }} |
| 84 | + deploy: |
| 85 | + resources: |
| 86 | + reservations: |
| 87 | + devices: |
| 88 | + - driver: nvidia |
| 89 | + count: 1 |
| 90 | + capabilities: [compute,video,graphics,utility] |
| 91 | +``` |
| 92 | + |
| 93 | +{% endif %}### Application Management |
| 94 | + |
| 95 | +There are two methods for installing applications inside the container: PRoot Apps (recommended for persistence) and Native Apps. |
| 96 | + |
| 97 | +#### PRoot Apps (Persistent) |
| 98 | + |
| 99 | +Natively installed packages (e.g., via `apt-get install`) will not persist if the container is recreated. To retain applications and their settings across container updates, we recommend using [proot-apps](https://github.com/linuxserver/proot-apps). These are portable applications installed to the user's persistent `$HOME` directory. |
| 100 | + |
| 101 | +To install an application, use the command line inside the container: |
| 102 | + |
| 103 | +``` |
| 104 | +proot-apps install filezilla |
| 105 | +``` |
| 106 | + |
| 107 | +A list of supported applications is available [here](https://github.com/linuxserver/proot-apps?tab=readme-ov-file#supported-apps). |
| 108 | + |
| 109 | +#### Native Apps (Non-Persistent) |
| 110 | + |
| 111 | +You can install packages from the system's native repository using the [universal-package-install](https://github.com/linuxserver/docker-mods/tree/universal-package-install) mod. This method will increase the container's start time and is not persistent. Add the following to your `compose.yaml`: |
| 112 | + |
| 113 | +```yaml |
| 114 | + environment: |
| 115 | + - DOCKER_MODS=linuxserver/mods:universal-package-install |
| 116 | + - INSTALL_PACKAGES=libfuse2|git|gdb |
| 117 | +``` |
0 commit comments