The quickstart breaks, and it is worth understanding why
The question this guide answers was asked in public and never really answered. Under the SearXNG thread on Hacker News, a commenter called goodroot wrote: “This appears to be a key tool for providing search to local models. I’m curious what setups folks use to provide this functionality.” So: start the way the project’s own compose file tells you to, with the config directory bind-mounted and Linux capabilities dropped.
services:
searxng:
image: searxng/searxng:2026.11.2-cccbc9e15
container_name: searxng
ports:
- "127.0.0.1:8080:8080"
volumes:
- ./searxng:/etc/searxng:rw
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID$ docker compose up -d
Container searxng Started
$ docker compose ps
searxng Restarting (1) 6 seconds ago
$ docker compose logs
... "/etc/searxng/settings.yml" does not exist, creating from template...
cp: can't create '/etc/searxng/settings.yml': Permission denied
!!! ERROR
!!! "/etc/searxng/settings.yml" is not a valid file, exiting...Here is what is happening. Docker created ./searxng for you, owned by uid 977 — the container’s own user — with mode 755. The entrypoint then tries to write the default config into it as root. Normally root walks through a permission check like that without noticing, because root holds the DAC_OVERRIDE capability. The quickstart drops it. You can watch the capability do the work:
$ docker run --rm --cap-drop ALL -v $PWD/searxng:/etc/searxng \
--entrypoint sh searxng/searxng:2026.11.2-cccbc9e15 \
-c 'touch /etc/searxng/probe && echo WROTE || echo DENIED'
DENIED
$ docker run --rm --cap-drop ALL --cap-add DAC_OVERRIDE -v $PWD/searxng:/etc/searxng \
--entrypoint sh searxng/searxng:2026.11.2-cccbc9e15 \
-c 'touch /etc/searxng/probe && echo WROTE || echo DENIED'
WROTE



