Persistent local SearX

Hi, I follow the manual here : Docker installation — Searx Documentation (Searx-1.0.0.tex)

I put the local searx as default.

Everything is ok, untill I restart my Manjaro : then, I see docker is running, the searX container exists but I cannot open it anymore on localhost:80

Anyone with experience on this ?

1 Like

I run a searx instance on a raspberry pi using minimal Raspian :slight_smile:

I checked the docker type install and it works as described at Docker installation — Searx Documentation (Searx-1.0.0.tex)

[tiger fh]# docker pull searx/searx
Using default tag: latest
latest: Pulling from searx/searx
3d2430473443: Pull complete 
c30eb5f0c6f4: Pull complete 
26b44ef74329: Pull complete 
e0fbc63b49d3: Pull complete 
7bfb52d56755: Pull complete 
7187505f56e9: Pull complete 
7c829c3bc002: Pull complete 
Digest: sha256:71aa82216e1cdaffc6c5605221cbc7f7ff746369a480620c8ff87ea4b0c0df19
Status: Downloaded newer image for searx/searx:latest
[tiger fh]# export PORT=80
[tiger fh]# docker run --rm -d -v ${PWD}/searx:/etc/searx -p $PORT:8080 -e BASE_URL=http://localhost:$PORT/ searx/searx

Yes, by me it does work as well… untill reboot :confused:

Do you imply I should change the ports during first install ?

After a reboot you need to start the container.

What is the output of docker ps after the reboot. Is the container really running?

~]$ docker ps -a
[me@ordi ~]$

I see that --rm removes the container if stopped.

Should I change this of create a script with

export PORT=80
docker run --rm -d -v ${PWD}/searx:/etc/searx -p $PORT:8080 -e BASE_URL=http://localhost:$PORT/ searx/searx

to be run at startup ?

Even if you don’t remove the container after it stops, you need to start the container after a reboot.

I would create a systemd services that starts and stops the container. It can even pull a new version at startup if necessary.

How do you do this ?

I’m totally newbie on containers (and never was a service specialist) :slight_smile:

I would use something like this

Description=searx container 

ExecStartPre=-/usr/bin/docker kill searx
ExecStartPre=-/usr/bin/docker rm searx
ExecStartPre=-/usr/bin/docker pull searx/searx
ExecStart=/usr/bin/docker run \
    --name searx \
    -v /home/xabbu/searx:/etc/searx \
    -p 80:8080 \
    -e BASE_URL=http://localhost:80/ \
ExecStop=/usr/bin/docker kill searx
ExecStopPost=-/usr/bin/docker rm searx


You want at least change the username and the path for the mount. The commands that start with - can fail. The first two ExecStartPre commands are not necessary, but sometimes it is better to play save.

1 Like

Wahh !
Seems to work perfectly.

I had to make it as root :

su -
systemctl edit --force --full searx.service

And copy/paste your suggestion (with my username)

I have polishing questions:

  • Why do you put a - after the ExecStartPre= ?
  • How do I check that the other commands with a minus sign actually work ?
  • I can launch searx with http://localhost/search instead of http://localhost:80 but have no idea of why !

The - indicates that the command is allowed to fail (it fails if there is no searx container to kill or remove.
You don’t, the - ignores errors. However, if they fail, the Start one would complain.

Because http by default is using port 80.

A small suggestions from my side is to change the port forwarding to “” so that you’re not globally opening up port 80 for everyone (in you network) to use. (Except you want that, of course.)

Also, wouldn’t a --restart always be quicker instead of this long service? And why killing the container?


Well, thank you all : I learn a lot on this thread :slight_smile:

I do have a last issue : somehow I cannot keep the preferences I set up in SearX

It tells me it is reachable @ http://localhost/?preferences=VeryLongAlphaNumericString&q=%s

But this adresse leads to nothing and If I close my browser instances and reopen, I’m on a fresh profile.

What do I miss ?

Would --restart always survive a reboot?

It is just to stop the container before the system shuts down. The docker stop did not always worked reliable. But I must admit, I tested this a very log time ago.

Yes, that’s the point of having it.

So, I did:

systemctl stop searx
systemctl disable searx
docker container stop strange_name
docker run --restart=always -d -v ${PWD}/searx:/etc/searx -p 80:8080 -e BASE_URL=http://localhost:80/ searx/searx

(replacing --rm with --restart=always )

Restarted and it works.

Shutdown was a little longer.
I still didn’t find out how to keep the settings (don’t have them @ reboot)

Which settings are you talking about? You mount the /etc/searx folder of the container, I guess the settings are stored there.

Above, you were talking about the browser, I don’t know how it’s store but it’ll be with cookies. That depends on your browser settings.

Edit: I have just tested it, and it works :person_shrugging:

1 Like

:sweat_smile: Got it ! I’ll have to amend the setting file : here I amended in the browser where I do use site bleacher that… cleans the cookies !

How do you do this ?

Another idea here, by the way : would this be a multidevice solution for personal or family use ?

It is recommended to read the Arch Wiki on docker

A user service executing a script would suffice - after all it is only for your usage - right?

user docker script

Create a script in ~/.local/bin name it and make it executable

mkdir -p ~/.local/bin
touch ~/.local/bin/

Edit the file and paste below content

#!/usr/bin/env bash

if [[ $1 == 'stop' ]]; then
    docker kill $(docker container ls | grep 'searx/searx' | cut -d' ' -f1)
    exit 0
# set a work dir
export PORT=80
docker pull searx/searx
docker run --rm -d -v ${workdir}/searx:/etc/searx -p $PORT:8080 -e BASE_URL=http://localhost:$PORT/ searx/searx

user setup

Add your username to docker group (remember to log-off and login to activate the group)

sudo gpasswd -a $USER docker

user service unit

Create a local .config/systemd/user folder and create the service file

mkdir -p ~/.config/systemd/user
touch ~/.config/systemd/user/searx.service

Edit the service file and paste below content

Description=Local Searx search engine



Enable the the user service

systemctl --user enable --now 

Unit files need the absolute path: /usr/bin/bash.

You already do with the -v option.

Here, I would recommend setting a good path instead of relying on PWD. I wouldn’t know where the current working directory is for such a unit:

Yes - you are right - I didn’t think of that - it all depends on where you are when you launch the service.

I will experiment with this :slight_smile:

Reworked the setup - setting a path as you noted.

Well, I’m puzzled now ! :melting_face:

Do I stay with the --restart=always or do I restart a service (What does minimize process & RAM consumption ?

Where do I find the /etc/searx folder ?