I hosted searxng on portainer and receive PermissionError and no python application found error

Log:

PermissionError: [Errno 13] Permission denied: '/etc/searxng/settings.yml'

unable to load app 0 (mountpoint='') (callable not found or import error)

*** no app loaded. going in full dynamic mode ***

--- no python application found, check your startup logs for errors ---

[pid: 19|app: -1|req: -1/1] 127.0.0.1 () {28 vars in 330 bytes} [Sat May 17 05:06:00 2025] HEAD /healthz => generated 21 bytes in 0 msecs (HTTP/1.1 500) 3 headers in 102 bytes (0 switches on core 0)

I tried removing cap_drop (as instructed on https://github.com/searxng/searxng-docker/issues/115) but no luck

version: "3.7"

services:
  # caddy:
  #   container_name: caddy
  #   image: docker.io/library/caddy:2-alpine
  #   network_mode: host
  #   restart: unless-stopped
  #   volumes:
  #     - ./Caddyfile:/etc/caddy/Caddyfile:ro
  #     - caddy-data:/data:rw
  #     - caddy-config:/config:rw
  #   environment:
  #     # - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost/}
  #     - SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal}
  #   cap_drop:
  #     - ALL
  #   cap_add:
  #     - NET_BIND_SERVICE
  #   logging:
  #     driver: "json-file"
  #     options:
  #       max-size: "1m"
  #       max-file: "1"

  redis:
    container_name: redis
    image: docker.io/valkey/valkey:8-alpine
    command: valkey-server --save 30 1 --loglevel warning
    restart: unless-stopped
    networks:
      - searxng
    volumes:
      - valkey-data2:/data
    # cap_drop:
    #   - ALL
    cap_add:
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"

  searxng:
    container_name: searxng
    image: docker.io/searxng/searxng:latest
    restart: unless-stopped
    networks:
      - searxng
    ports:
      # - "127.0.0.1:8080:8080"
      - "20054:8080"
    volumes:
      - ./searxng:/etc/searxng:rw
    environment:
      # - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
      - SEARXNG_BASE_URL="http://mydomain:20054/"
      - UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4}
      - UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4}
    # cap_drop:
    #   - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"

networks:
  searxng:

volumes:
  # caddy-data:
  # caddy-config:
  valkey-data2:

thx a lot!

  • null_dot@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    22 days ago

    I’ve never used portainer sorry.

    If you see the published port for a very short time then something might be crashing when it tries to start.

    docker logs searxng from cli might be revealing

    edit: I do have a searxng container and my compose.yml is very similar to yours. I guess we both copied the example. The only difference I can see is that you still have the env variables for UWSGI_WORKERS and UWSGI_THREADS. I just set both of those to 4 instead of using the SEARXNG_ env vars

    • Override4414@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      1
      ·
      22 days ago

      Listen on [::]:8080 doesn’t give 20054, could this be the reason?

      Listen on [::]:8080
      
      [uWSGI] getting INI configuration from /etc/searxng/uwsgi.ini
      
      open("/etc/searxng/uwsgi.ini"): Permission denied [core/io.c line 525]
      
      SearXNG version 2025.5.16+1b08324
      
      Use existing /etc/searxng/uwsgi.ini
      
      Use existing /etc/searxng/settings.yml
      
      Listen on [::]:8080
      
      [uWSGI] getting INI configuration from /etc/searxng/uwsgi.ini
      
      open("/etc/searxng/uwsgi.ini"): Permission denied [core/io.c line 525]
      
      SearXNG version 2025.5.16+1b08324
      
      Use existing /etc/searxng/uwsgi.ini
      
      Use existing /etc/searxng/settings.yml
      
      Listen on [::]:8080
      
      [uWSGI] getting INI configuration from /etc/searxng/uwsgi.ini
      
      open("/etc/searxng/uwsgi.ini"): Permission denied [core/io.c line 525]
      
      • HappyTimeHarry@lemm.ee
        link
        fedilink
        English
        arrow-up
        4
        ·
        edit-2
        22 days ago

        open(“/etc/searxng/uwsgi.ini”): Permission denied [core/io.c line 525]

        I think here is your problem. Make sure that file exists and is readable from inside of the docker.

          • HappyTimeHarry@lemm.ee
            link
            fedilink
            English
            arrow-up
            1
            ·
            22 days ago

            try opening a shell with ’ docker exec -it searxng sh" and see if you can cat the file from inside docker, if yes then I’m not sure of a solution ,if no then the problem is with permissions on your filesystem outside of docker where you have " - ./data/searxng:/etc/searxng" You need to go to ./data/searxng and correct the permissions so they can be read inside the docker.

            • Override4414@lemmy.worldOP
              link
              fedilink
              English
              arrow-up
              1
              ·
              22 days ago
              ~ # ls /etc/searxng
              settings.yml  uwsgi.ini
              ~ # cat settings.yml
              cat: can't open 'settings.yml': No such file or directory
              ~ # cat /etc/searxng/settings.yml
              general:
                # Debug mode, only for development. Is overwritten by ${SEARXNG_DEBUG}
                debug: false
                # displayed name
                instance_name: "searxng"
                # For example: https://example.com/privacy
              

              I think I do have the permission?

              • HappyTimeHarry@lemm.ee
                link
                fedilink
                English
                arrow-up
                1
                ·
                22 days ago

                If you have permissions then try editibg uwsgi.ini and see if it lets you save.

                Im going from memory but i think i had a similar issue and i had to manually create the file, yours shows the file already exists but it might not be writable.

              • HappyTimeHarry@lemm.ee
                link
                fedilink
                English
                arrow-up
                1
                ·
                22 days ago

                Yep Probably you need to change ownership and/or permissions of the files outside of docker.

                I dont want to give the wrong suggestion from memory so hopefully thats enough info to get you going in the direction of a fix. Basically see what user id owns the files inside of docker, make it the same uid outside of docker in the folder you are bind mounting.

      • null_dot@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        0
        ·
        22 days ago

        Awesome.

        You not only solved your problem but learned a heap along the way.

        I love searxng too btw. It’s the best way to search for the time being.