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:

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:
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: