Skip to content

Provided Docker Compose Solr container fails with "-f is not a valid command" #3285

@bepstein111

Description

@bepstein111

Hi there-

I'm trying to migrate my Docspell installation from my TrueNAS machine (via the ix apps) to a plain docker-compose install on bare metal. I copied the docker compose file into my own git repo and made the recommended changes (file pasted below), but upon deploying the stack, Solr goes into a restart loop with the error: "-f is not a valid command!"

Compose file:

name: docspell
services:
  # The restserver and joex containers defined here are configured
  # using env variables. Both must connect to the same database and
  # solr instance. More information on configuring can be found here:
  # https://docspell.org/docs/configure
  #
  # Please replace the values of the following with a custom secret
  # string:
  #
  # - DOCSPELL_SERVER_ADMIN__ENDPOINT_SECRET
  # - DOCSPELL_SERVER_AUTH_SERVER__SECRET
  # - DOCSPELL_SERVER_INTEGRATION__ENDPOINT_HTTP__HEADER_HEADER__VALUE
  #   (use the same value at the consumedir container!)
  #
  # After creating an account, you may want to set signup mode to
  # "closed" or to "invite". When using invite, you must also set
  # DOCSPELL_SERVER_BACKEND_SIGNUP_NEW__INVITE__PASSWORD to some
  # secret.
  restserver:
    image: ghcr.io/docspell/restserver:latest
    hostname: docspell-restserver
    container_name: docspell-restserver
    restart: unless-stopped
    ports:
      - "7880:7880"
    environment:
      TZ: ${TZ}
      DOCSPELL_SERVER_INTERNAL__URL: 'http://docspell-restserver:7880'
      DOCSPELL_SERVER_ADMIN__ENDPOINT_SECRET: ${DOCSPELL_SERVER_ADMIN__ENDPOINT_SECRET}
      DOCSPELL_SERVER_AUTH_SERVER__SECRET: ${DOCSPELL_SERVER_AUTH_SERVER__SECRET}
      DOCSPELL_SERVER_BACKEND_JDBC_PASSWORD: 'dbpass'
      DOCSPELL_SERVER_BACKEND_JDBC_URL: 'jdbc:postgresql://db:5432/dbname'
      DOCSPELL_SERVER_BACKEND_JDBC_USER: 'dbuser'
      DOCSPELL_SERVER_BIND_ADDRESS: '0.0.0.0'
      DOCSPELL_SERVER_FULL__TEXT__SEARCH_ENABLED: 'true'
      DOCSPELL_SERVER_FULL__TEXT__SEARCH_SOLR_URL: 'http://docspell-solr:8983/solr/docspell'
      DOCSPELL_SERVER_INTEGRATION__ENDPOINT_ENABLED: 'true'
      DOCSPELL_SERVER_INTEGRATION__ENDPOINT_HTTP__HEADER_ENABLED: 'true'
      DOCSPELL_SERVER_INTEGRATION__ENDPOINT_HTTP__HEADER_HEADER__VALUE: ${DOCSPELL_SERVER_INTEGRATION__ENDPOINT_HTTP__HEADER_HEADER__VALUE}
      DOCSPELL_SERVER_BACKEND_SIGNUP_MODE: 'open'
      DOCSPELL_SERVER_BACKEND_SIGNUP_NEW__INVITE__PASSWORD: ''
      DOCSPELL_SERVER_BACKEND_ADDONS_ENABLED: 'false'

  joex:
    image: ghcr.io/docspell/joex:latest
    hostname: docspell-joex
    container_name: docspell-joex
    ## For more memory add corresponding arguments, like below. Also see
    ## https://docspell.org/docs/configure/#jvm-options
    # command:
    #   - -J-Xmx3G
    restart: unless-stopped
    environment:
      TZ: ${TZ}
      DOCSPELL_JOEX_APP__ID: 'joex1'
      DOCSPELL_JOEX_PERIODIC__SCHEDULER_NAME: 'joex1'
      DOCSPELL_JOEX_SCHEDULER_NAME: 'joex1'
      DOCSPELL_JOEX_BASE__URL: 'http://docspell-joex:7878'
      DOCSPELL_JOEX_BIND_ADDRESS: '0.0.0.0'
      DOCSPELL_JOEX_FULL__TEXT__SEARCH_ENABLED: 'true'
      DOCSPELL_JOEX_FULL__TEXT__SEARCH_SOLR_URL: 'http://docspell-solr:8983/solr/docspell'
      DOCSPELL_JOEX_JDBC_PASSWORD: 'dbpass'
      DOCSPELL_JOEX_JDBC_URL: 'jdbc:postgresql://db:5432/dbname'
      DOCSPELL_JOEX_JDBC_USER: 'dbuser'
      DOCSPELL_JOEX_ADDONS_EXECUTOR__CONFIG_RUNNER: 'docker,trivial'
      DOCSPELL_JOEX_CONVERT_HTML__CONVERTER: 'weasyprint'
    ports:
      - "7878:7878"
    ## Uncomment when using the "docker" runner with addons
    # volumes:
    #   - /var/run/docker.sock:/var/run/docker.sock
    #   - /tmp:/tmp

  # The consumedir container watches a directory for files to upload
  # to docspell restserver. This uses the `dsc` tool. For information
  # on the available options, see `dsc --help`.
  # https://github.com/docspell/dsc
  #
  # The value after `Docspell-Integration` must match the secret
  # specified at the restserver via
  # DOCSPELL_SERVER_INTEGRATION__ENDPOINT_HTTP__HEADER_HEADER__VALUE.
  #
  # The --not-matches "**/.*" option is to exclude hidden files.
  consumedir:
    image: docspell/dsc:latest
    container_name: docspell-consumedir
    command:
      - dsc
      - "-d"
      - "http://docspell-restserver:7880"
      - "watch"
      - "--delete"
      - "-ir"
      - "--not-matches"
      - "**/.*"
      - "--header"
      - "Docspell-Integration:${DOCSPELL_SERVER_INTEGRATION__ENDPOINT_HTTP__HEADER_HEADER__VALUE}"
      - "/opt/docs"
    restart: unless-stopped
    volumes:
      - /docker-ct-settings/docspell/import:/opt/docs

  db:
    image: postgres:18.3
    container_name: postgres_db
    restart: unless-stopped
    volumes:
      - /docker-ct-settings/docspell/postgres_data:/var/lib/postgresql/
    environment:
      POSTGRES_USER: 'dbuser'
      POSTGRES_PASSWORD: 'dbpass'
      POSTGRES_DB: 'dbname'

  solr:
    image: solr:10
    container_name: docspell-solr
    restart: unless-stopped
    volumes:
      - solr_data:/var/solr
    command:
      - bash
      - -c
      - 'precreate-core docspell; exec solr -f -Dsolr.modules=analysis-extras'
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8983/solr/docspell/admin/ping"]
      interval: 1m
      timeout: 10s
      retries: 2
      start_period: 30s

volumes:
  solr_data:

It's pretty much the exact same as given, except I've replaced the recommended passwords with environment variables so I can set them locally and not have them on github, even if it's a private repo.

Error:

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions