Docker: Meilisearch database version incompatible

This is a quick and dirty solution to upgrade a Mailisearch container in Docker to a new version

Docker: Meilisearch database version incompatible

After running Meilisearch within my Linkwarden deployment, Meilisearch was updated from version 1.15.2 to 1.16. Unfortunately, after the container was restartet using the new version, I got this error from my Meilisearch container:

meilisearch: error=Your database version (1.15.2) is incompatible with your current engine version (1.16.0).

My Linkwarden container, which uses Meilisearch for full text searches, also got errors:

app-1          | [1] MeiliSearchRequestError: Request to http://meilisearch:7700/indexes has failed
app-1          | [1]     at <anonymous> (/data/node_modules/meilisearch/src/http-requests.ts:155:13)
app-1          | [1]     at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
app-1          | [1]     ... 5 lines matching cause stack trace ...
app-1          | [1]     at async startIndexing (/data/apps/worker/workers/linkIndexing.ts:64:3) {
app-1          | [1]   [cause]: TypeError: fetch failed
app-1          | [1]       at node:internal/deps/undici/undici:13502:13
app-1          | [1]       at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
app-1          | [1]       at async HttpRequests.request (/data/node_modules/meilisearch/src/http-requests.ts:154:22)
app-1          | [1]       at async HttpRequests.post (/data/node_modules/meilisearch/src/http-requests.ts:245:12)
app-1          | [1]       at async Function.create (/data/node_modules/meilisearch/src/indexes.ts:254:18)
app-1          | [1]       at async MeiliSearch.createIndex (/data/node_modules/meilisearch/src/meilisearch.ts:139:12)
app-1          | [1]       at async setupLinksIndexSchema (/data/apps/worker/workers/linkIndexing.ts:18:5)
app-1          | [1]       at async startIndexing (/data/apps/worker/workers/linkIndexing.ts:64:3) {
app-1          | [1]     [cause]: Error: getaddrinfo EAI_AGAIN meilisearch
app-1          | [1]         at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:120:26) {
app-1          | [1]       errno: -3001,
app-1          | [1]       code: 'EAI_AGAIN',
app-1          | [1]       syscall: 'getaddrinfo',
app-1          | [1]       hostname: 'meilisearch'
app-1          | [1]     }
app-1          | [1]   }
app-1          | [1] }
app-1          | [1]
app-1          | [1] Node.js v22.14.0
app-1          | [1] worker exited (code=1 signal=null) – restarting...

The Meilisearch documentation told me that I have to export and import my data.

But as I'm a lazy guy, I searched around for another solution. I found it here, where you can find a script which helps you to update your Meilisearch database.

Unfortunately, I had to execute this script from within the Meilisearch container. But when I try to connect, I get this error:

Error response from daemon: Container 26dcac5dbf20c16f9b4f9725f7d98068a63066b211fd50983342dbcdbac053c4 is restarting, wait until the container is running

So there seems to be no way to upgrade my container. Do I really have to stay on an outdated version of Meilisearch?

But my solution was quick and dirty:

  • stop Meilisearch container: docker stop linkwarden-meilisearch-1
  • delete Meilisearch container: docker rm -f linkwarden-meilisearch-1
  • remove Meilisearch data: depends on where you store the data. Remove it like sudo rm -rf meili_data (when mapped from filesystem), or docker volume rm <volume> (when using a volume)

After that, I was able to pull and start the containers, using the latest Meilisearch version:

# docker compose pull
# docker compose up -d

After starting, the logs showed me that Linkwarden and Meilisearch continued to work together (app-1 is Linkwarden, meilisearch-1 is the Meilisearch container):

app-1          | [1] Initializing the worker...
app-1          | [1] Starting RSS polling...
app-1          | [1] Starting link processing...
meilisearch-1  | 2025-08-06T12:07:54.059761Z  INFO HTTP request{method=GET host="meilisearch:7700" route=/indexes/links query_parameters= user_agent=node status_code=200}: meilisearch: close time.busy=763µs time.idle=1.24ms
meilisearch-1  | 2025-08-06T12:07:54.106305Z  INFO HTTP request{method=PUT host="meilisearch:7700" route=/indexes/links/settings/filterable-attributes query_parameters= user_agent=node status_code=202}: meilisearch: close time.busy=185µs time.idle=3.08ms
meilisearch-1  | 2025-08-06T12:07:54.109465Z  INFO index_scheduler::scheduler: A batch of tasks was successfully completed with 1 successful tasks and 0 failed tasks.
meilisearch-1  | 2025-08-06T12:07:54.120134Z  INFO HTTP request{method=GET host="meilisearch:7700" route=/tasks/3 query_parameters= user_agent=node status_code=200}: meilisearch: close time.busy=155µs time.idle=897µs
meilisearch-1  | 2025-08-06T12:07:54.130437Z  INFO HTTP request{method=PUT host="meilisearch:7700" route=/indexes/links/settings/sortable-attributes query_parameters= user_agent=node status_code=202}: meilisearch: close time.busy=174µs time.idle=1.70ms
meilisearch-1  | 2025-08-06T12:07:54.135278Z  INFO index_scheduler::scheduler: A batch of tasks was successfully completed with 1 successful tasks and 0 failed tasks.
meilisearch-1  | 2025-08-06T12:07:54.138744Z  INFO HTTP request{method=GET host="meilisearch:7700" route=/tasks/4 query_parameters= user_agent=node status_code=200}: meilisearch: close time.busy=121µs time.idle=99.8µs
app-1          | [1] Starting link indexing...

Sure, it's no clean solution. But as this is my collection of links to websites I want to read in some day, the amount of data is not very large. The real data is in PostgreSQL, and Meilisearch only stores information about full text search. So, this solution is okay for me...

Subscribe to Martin's Blog

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe