[Bug]: Latest stable Docker image(ghcr.io/toeverything/affine-graphql:stable-512a908@sha256:7cf8451092ca123a9d7d7381eff2f9b8121ece16efd9e5b8a503886a244abc62) fails to start
What happened?
After upgrading to the latest ghcr.io/toeverything/affine:stable Docker image(ghcr.io/toeverything/affine-graphql:stable-512a908@sha256:7cf8451092ca123a9d7d7381eff2f9b8121ece16efd9e5b8a503886a244abc62), the container fails to start with a MODULE_NOT_FOUND error.
The previous stable image(sha256:d7118f08d8ba23d1f5cc5031c492f4d0bbb487a3b9c7d551f7bcf542d0997289) worked fine using the same Docker Compose setup.
Environment
- Host OS: Ubuntu 22.04 (ARM64)
- Docker version: 26.1.3
- Docker Compose version: 2.27.0
- AFFiNE image:
ghcr.io/toeverything/affine:stable(the latest stable one, 2025. 06. 10.) - Persistent volumes used: Yes
Part of my docker-compose.yml is like this.
services:
affine:
image: ghcr.io/toeverything/affine-graphql:stable
#image: ghcr.io/toeverything/affine-graphql:stable-512a908@sha256:7cf8451092ca123a9d7d7381eff2f9b8121ece16efd9e5b8a503886a244abc62
container_name: affine_selfhosted
command:
['sh', '-c', 'node ./scripts/self-host-predeploy && node ./dist/index.js']
ports:
- '3010:3010'
- '5555:5555'
depends_on:
redis:
condition: service_healthy
postgres:
condition: service_healthy
volumes:
# custom configurations
- /data/affine/config:/root/.affine/config
# blob storage
- /data/affine/storage:/root/.affine/storage
logging:
driver: 'json-file'
options:
max-size: '1000m'
restart: unless-stopped
environment:
- NODE_OPTIONS=--import=./scripts/register.js
- AFFINE_CONFIG_PATH=/root/.affine/config
- REDIS_SERVER_HOST=redis
- DATABASE_URL=postgres://affine:affine@postgres:5432/affine
- NODE_ENV=production
- AFFINE_ADMIN_EMAIL=${AFFINE_ADMIN_EMAIL}
- AFFINE_ADMIN_PASSWORD=${AFFINE_ADMIN_PASSWORD}
redis:
image: redis
container_name: affine_redis
restart: unless-stopped
volumes:
- /data/affine/redis:/data
healthcheck:
test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
interval: 10s
timeout: 5s
retries: 5
postgres:
image: postgres:16
container_name: affine_postgres
restart: unless-stopped
volumes:
- /data/affine/postgres:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U affine']
interval: 10s
timeout: 5s
retries: 5
environment:
The following are the container logs from the latest stable image.
node:internal/modules/esm/resolve:275
throw new ERR_MODULE_NOT_FOUND(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/scripts/register.js' imported from /app/
at finalizeResolution (node:internal/modules/esm/resolve:275:11)
at moduleResolve (node:internal/modules/esm/resolve:860:10)
at defaultResolve (node:internal/modules/esm/resolve:984:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:780:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:704:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:687:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:305:38)
at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:643:36)
at TracingChannel.tracePromise (node:diagnostics_channel:344:14)
at ModuleLoader.import (node:internal/modules/esm/loader:642:21) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///app/scripts/register.js'
}
Node.js v22.16.0
node:internal/modules/esm/resolve:275
throw new ERR_MODULE_NOT_FOUND(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/scripts/register.js' imported from /app/
at finalizeResolution (node:internal/modules/esm/resolve:275:11)
at moduleResolve (node:internal/modules/esm/resolve:860:10)
at defaultResolve (node:internal/modules/esm/resolve:984:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:780:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:704:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:687:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:305:38)
at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:643:36)
at TracingChannel.tracePromise (node:diagnostics_channel:344:14)
at ModuleLoader.import (node:internal/modules/esm/loader:642:21) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///app/scripts/register.js'
}
Node.js v22.16.0
node:internal/modules/esm/resolve:275
throw new ERR_MODULE_NOT_FOUND(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/scripts/register.js' imported from /app/
at finalizeResolution (node:internal/modules/esm/resolve:275:11)
at moduleResolve (node:internal/modules/esm/resolve:860:10)
at defaultResolve (node:internal/modules/esm/resolve:984:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:780:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:704:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:687:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:305:38)
at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:643:36)
at TracingChannel.tracePromise (node:diagnostics_channel:344:14)
at ModuleLoader.import (node:internal/modules/esm/loader:642:21) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///app/scripts/register.js'
}
Node.js v22.16.0
node:internal/modules/esm/resolve:275
throw new ERR_MODULE_NOT_FOUND(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/scripts/register.js' imported from /app/
at finalizeResolution (node:internal/modules/esm/resolve:275:11)
at moduleResolve (node:internal/modules/esm/resolve:860:10)
at defaultResolve (node:internal/modules/esm/resolve:984:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:780:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:704:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:687:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:305:38)
at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:643:36)
at TracingChannel.tracePromise (node:diagnostics_channel:344:14)
at ModuleLoader.import (node:internal/modules/esm/loader:642:21) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///app/scripts/register.js'
}
Node.js v22.16.0
node:internal/modules/esm/resolve:275
throw new ERR_MODULE_NOT_FOUND(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/scripts/register.js' imported from /app/
at finalizeResolution (node:internal/modules/esm/resolve:275:11)
at moduleResolve (node:internal/modules/esm/resolve:860:10)
at defaultResolve (node:internal/modules/esm/resolve:984:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:780:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:704:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:687:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:305:38)
at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:643:36)
at TracingChannel.tracePromise (node:diagnostics_channel:344:14)
at ModuleLoader.import (node:internal/modules/esm/loader:642:21) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///app/scripts/register.js'
}
Node.js v22.16.0
Distribution version
Linux
App Version
No response
What browsers are you seeing the problem on if you're using web version?
No response
Are you self-hosting?
- [x] Yes
Self-hosting Version
No response
Relevant log output
Anything else?
No response
Issue Status: 🆕 *Untriaged
*🆕 Untriaged
The team has not yet reviewed the issue. We usually do it within one business day. Docs: https://github.com/toeverything/AFFiNE/blob/canary/docs/issue-triaging.md
This is an automatic reply by the bot.
@attorneyatlaw
You need to run docker compose pull to pull the latest image update as this issue has long been fixed.
Then in the same directory run docker compose up -d --force-recreate.
You need to run
docker compose pullto pull the latest image update as this issue has long been fixed. Then in the same directory rundocker compose up -d --force-recreate.
I did like the below and I got the error in my container.
- docker compose down
- edit my docker-compose.yml to pull the latest image
- docker compose up -d
Could you let me know how this issues is fixed?
Have the image line look like below. Did you run docker compose pull after you made the changes to the compose file?
https://github.com/toeverything/AFFiNE/blob/c846c57a1228af4e8b627df8696df9aabf20fb1a/.docker/selfhost/compose.yml#L4
You can take a look at the full compose file shown in the following link and see what you are missing from your own: https://github.com/toeverything/AFFiNE/blob/canary/.docker/selfhost/compose.yml
Thanks for your comments @NorkzYT
I edited two parts in my original docker-compose.yml
and it worked.
command: ['sh', '-c', 'node ./scripts/self-host-predeploy && node ./dist/index.js']
->
command: ['sh', '-c', 'node ./scripts/self-host-predeploy && node ./dist/main.js']
- NODE_OPTIONS=--import=./scripts/register.js
->
#- NODE_OPTIONS=--import=./scripts/register.js
services:
affine:
image: ghcr.io/toeverything/affine-graphql:stable
#image: ghcr.io/toeverything/affine-graphql:stable-512a908@sha256:7cf8451092ca123a9d7d7381eff2f9b8121ece16efd9e5b8a503886a244abc62
container_name: affine_selfhosted
command:
['sh', '-c', 'node ./scripts/self-host-predeploy && node ./dist/main.js']
ports:
- '3010:3010'
- '5555:5555'
depends_on:
redis:
condition: service_healthy
postgres:
condition: service_healthy
volumes:
# custom configurations
- /data/affine/config:/root/.affine/config
# blob storage
- /data/affine/storage:/root/.affine/storage
logging:
driver: 'json-file'
options:
max-size: '1000m'
restart: unless-stopped
environment:
#- NODE_OPTIONS=--import=./scripts/register.js
- AFFINE_CONFIG_PATH=/root/.affine/config
- REDIS_SERVER_HOST=redis
- DATABASE_URL=postgres://affine:affine@postgres:5432/affine
- NODE_ENV=production
- AFFINE_ADMIN_EMAIL=${AFFINE_ADMIN_EMAIL}
- AFFINE_ADMIN_PASSWORD=${AFFINE_ADMIN_PASSWORD}
redis:
image: redis
container_name: affine_redis
restart: unless-stopped
volumes:
- /data/affine/redis:/data
healthcheck:
test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
interval: 10s
timeout: 5s
retries: 5
postgres:
image: postgres:16
container_name: affine_postgres
restart: unless-stopped
volumes:
- /data/affine/postgres:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U affine']
interval: 10s
timeout: 5s
retries: 5
environment:
Thank you, @attorneyatlaw; your solution works for me as well.
@attorneyatlaw I'm curious, where did you get your docker-compose.yml from?
@attorneyatlaw I'm curious, where did you get your docker-compose.yml from?
I don’t remember exactly, but I think I found it while browsing the web. Maybe from here?
@attorneyatlaw
Great that it now works.