Immich running but web upload errors: "unable to upload file".

Status: I just got the web server up and running. It correctly reports storage available in the corner and both the db and uploads folders have populated with a bunch of folders. Symptoms: When I use the web upload to upload a file, a toast popup indicates an error has occured ("unable to upload file") and the image doesn't appear in the web gui. However, if I refresh the page, a record of the file DOES appear in the web gui, but it's blank and says "error loading image". If I dig down into the uploads folder of my system, I see that my test uploads ARE present and uploaded correctly. So immich is correctly writing them to the disk. But for whatever reason it's throwing up errors and doesn't display them properly in the gui. When I try to delete the error'd images, they go to the trash folder as expected. If I try to perma-delete, I get "unable to delete asset" or something along those lines but they DO disappear from the gui. They remain on disk in the uploads folder and weren't properly deleted. My setup: I'm new to Immich and this is a new install on a Synology NAS via portainer. I mostly followed the portainer guide on the immich website but had to comment out one of the health check intervals due to Synology using an older Docker framework.
9 Replies
Immich
Immich2w ago
:wave: Hey @tismondo, Thanks for reaching out to us. Please carefully read this message and follow the recommended actions. This will help us be more effective in our support effort and leave more time for building Immich :immich:. References - Container Logs: docker compose logs docs - Container Status: docker ps -a docs - Reverse Proxy: https://immich.app/docs/administration/reverse-proxy - Code Formatting https://support.discord.com/hc/en-us/articles/210298617-Markdown-Text-101-Chat-Formatting-Bold-Italic-Underline#h_01GY0DAKGXDEHE263BCAYEGFJA Checklist I have... 1. :ballot_box_with_check: verified I'm on the latest release(note that mobile app releases may take some time). 2. :ballot_box_with_check: read applicable release notes. 3. :ballot_box_with_check: reviewed the FAQs for known issues. 4. :ballot_box_with_check: reviewed Github for known issues. 5. :ballot_box_with_check: tried accessing Immich via local ip (without a custom reverse proxy). 6. :ballot_box_with_check: uploaded the relevant information (see below). 7. :ballot_box_with_check: tried an incognito window, disabled extensions, cleared mobile app cache, logged out and back in, different browsers, etc. as applicable (an item can be marked as "complete" by reacting with the appropriate number) Information In order to be able to effectively help you, we need you to provide clear information to show what the problem is. The exact details needed vary per case, but here is a list of things to consider: - Your docker-compose.yml and .env files. - Logs from all the containers and their status (see above). - All the troubleshooting steps you've tried so far. - Any recent changes you've made to Immich or your system. - Details about your system (both software/OS and hardware). - Details about your storage (filesystems, type of disks, output of commands like fdisk -l and df -h). - The version of the Immich server, mobile app, and other relevant pieces. - Any other information that you think might be relevant. Please paste files and logs with proper code formatting, and especially avoid blurry screenshots. Without the right information we can't work out what the problem is. Help us help you ;) If this ticket can be closed you can use the /close command, and re-open it later if needed.
tismondo
tismondoOP2w ago
#
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.

name: immich

services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
user: 1026:100
env_file:
- stack.env
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false

immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
user: 1026:100
env_file:
- stack.env
restart: always
healthcheck:
disable: false
#
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.

name: immich

services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
user: 1026:100
env_file:
- stack.env
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false

immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
user: 1026:100
env_file:
- stack.env
restart: always
healthcheck:
disable: false

redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
user: 1026:100
healthcheck:
test: redis-cli ping || exit 1
restart: always

database:
container_name: immich_postgres
image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
user: 1026:100
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck:
test: >-
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
interval: 5m
# start_interval: 30s
start_period: 5m
command: >-
postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on
restart: always

volumes:
model-cache:

redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
user: 1026:100
healthcheck:
test: redis-cli ping || exit 1
restart: always

database:
container_name: immich_postgres
image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
user: 1026:100
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck:
test: >-
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
interval: 5m
# start_interval: 30s
start_period: 5m
command: >-
postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on
restart: always

volumes:
model-cache:
env
UPLOAD_LOCATION=/volume1/docker/immich
DB_DATA_LOCATION=/volume2/immichdb/db
TZ=Asia/Seoul
IMMICH_VERSION=release
DB_PASSWORD=*****
DB_USERNAME=*****
DB_DATABASE_NAME=immich
UPLOAD_LOCATION=/volume1/docker/immich
DB_DATA_LOCATION=/volume2/immichdb/db
TZ=Asia/Seoul
IMMICH_VERSION=release
DB_PASSWORD=*****
DB_USERNAME=*****
DB_DATABASE_NAME=immich
System: Synology DS1019+ running portainer with 16gb ram. Immich: 1.131.3 Happy to paste logs but there are four containers and they're quite.... verbose! I'd appreciate some guidance about which containers would be helpful to know more about.
Immich
Immich2w ago
Successfully submitted, a tag has been added to inform contributors. :white_check_mark:
tismondo
tismondoOP2w ago
I'm sure this must have something to do with it --
ReplyError: ERR Error running script (call to f_b4cd4bbdf096cd8d06246080315ae81c56e05a46): @user_script:222: @user_script: 222: -MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.

at parseError (/usr/src/app/node_modules/redis-parser/lib/parser.js:179:12)

at parseType (/usr/src/app/node_modules/redis-parser/lib/parser.js:302:14) {


command: {

name: 'evalsha',

args: [

'b4cd4bbdf096cd8d06246080315ae81c56e05a46',

'10',

'immich_bull:smartSearch:wait',

'immich_bull:smartSearch:active',

'immich_bull:smartSearch:prioritized',

'immich_bull:smartSearch:events',

'immich_bull:smartSearch:stalled',

'immich_bull:smartSearch:limiter',

'immich_bull:smartSearch:delayed',

'immich_bull:smartSearch:paused',

'immich_bull:smartSearch:meta',

'immich_bull:smartSearch:pc',

'immich_bull:smartSearch:',

'1744887581386',



,

<Buffer de 00 03 a5 74 6f 6b 65 6e d9 27 38 38 39 30 64 61 31 39 2d 32 64 65 62 2d 34 30 65 65 2d 62 35 36 30 2d 63 62 32 31 61 38 35 32 33 32 35 62 3a 35 30 ... 25 more bytes>

]

}

}
ReplyError: ERR Error running script (call to f_b4cd4bbdf096cd8d06246080315ae81c56e05a46): @user_script:222: @user_script: 222: -MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.

at parseError (/usr/src/app/node_modules/redis-parser/lib/parser.js:179:12)

at parseType (/usr/src/app/node_modules/redis-parser/lib/parser.js:302:14) {


command: {

name: 'evalsha',

args: [

'b4cd4bbdf096cd8d06246080315ae81c56e05a46',

'10',

'immich_bull:smartSearch:wait',

'immich_bull:smartSearch:active',

'immich_bull:smartSearch:prioritized',

'immich_bull:smartSearch:events',

'immich_bull:smartSearch:stalled',

'immich_bull:smartSearch:limiter',

'immich_bull:smartSearch:delayed',

'immich_bull:smartSearch:paused',

'immich_bull:smartSearch:meta',

'immich_bull:smartSearch:pc',

'immich_bull:smartSearch:',

'1744887581386',



,

<Buffer de 00 03 a5 74 6f 6b 65 6e d9 27 38 38 39 30 64 61 31 39 2d 32 64 65 62 2d 34 30 65 65 2d 62 35 36 30 2d 63 62 32 31 61 38 35 32 33 32 35 62 3a 35 30 ... 25 more bytes>

]

}

}
meanwhile the redis log just keeps repeating
1:M 17 Apr 2025 11:02:03.050 * 1 changes in 3600 seconds. Saving...

1:M 17 Apr 2025 11:02:03.050 * Background saving started by pid 2562

2562:C 17 Apr 2025 11:02:03.051 # Failed opening the RDB file dump.rdb (in server root dir /data) for saving: Permission denied

1:M 17 Apr 2025 11:02:03.151 # Background saving error
1:M 17 Apr 2025 11:02:03.050 * 1 changes in 3600 seconds. Saving...

1:M 17 Apr 2025 11:02:03.050 * Background saving started by pid 2562

2562:C 17 Apr 2025 11:02:03.051 # Failed opening the RDB file dump.rdb (in server root dir /data) for saving: Permission denied

1:M 17 Apr 2025 11:02:03.151 # Background saving error
It looks like a permission error but I don't understand how to fix it. redis has all the same permissions as the other 3 containers.
tismondo
tismondoOP2w ago
So I have set the user in all of the containers I haven't added those mount points the FAQ doesn't specify which container needs those mount points. Do I mount them at the bottom of the compose.yaml? Ehhhh I've fiddled with this so long, I'm sort of at the end of my rope and would like to make some progress. I can see it's not meant to be run as non-root. I'll just re-roll it with root privileges and hope everything is fine.
Immich
Immich2w ago
This thread has been closed. To re-open, use the button below.
bo0tzz
bo0tzz2w ago
It does, right? It's at least very strongly hinted in the proposed volume names :P
tismondo
tismondoOP2w ago
My docker-foo is not very strong so yes, after taking a moment to remember the container names I gathered which container applies to each of those points, but it's not clear to me where/how in the compose.yaml to paste/mount them. That's certainly my failing since I'm not a pro at this. I just didn't know where to start decoding how to fit those pieces together. But genuinely - thank you for your help. You helped me identify being non-root as the issue and after re-rolling with root I seem to be making progress getting this up and running.

Did you find this page helpful?