I
Immich•2mo ago
CatTrigger

ERROR [TypeOrmModule] Unable to connect to the database.

I'm bumping into an error using the docker compose method of installation with immich. All containers seem to be up asides from immich-server (which is stuck in health:starting) and machine_learning (restarting). A closer look at the docker logs of the immich-server container reveals:
20 Replies
Immich
Immich•2mo ago
:wave: Hey @CatTrigger, 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.
CatTrigger
CatTriggerOP•2mo ago
I'm not sure if this matters, but I already have paperless installed on this machine, which uses the same redis port at 6379. Any attempts of trying to change this port through the .env results in an econnect error with connection refused. My .env file:
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/home/user/shares/data/o/PhotoArchive/library
# The location where your database files are stored
DB_DATA_LOCATION=/home/user/shares/data/o/PhotoArchive/postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=America/Chicago

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=password

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=user
DB_DATABASE_NAME=immich
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/home/user/shares/data/o/PhotoArchive/library
# The location where your database files are stored
DB_DATA_LOCATION=/home/user/shares/data/o/PhotoArchive/postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=America/Chicago

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=password

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=user
DB_DATABASE_NAME=immich
My docker-compose.yml
#
# 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
env_file:
- .env
ports:
- '2283:2283'
depends_on:
- redis
- database
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
env_file:
- .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, openvino] 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, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
healthcheck:
disable: false

redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
healthcheck:
test: redis-cli ping || exit 1
restart: always
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] 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, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
healthcheck:
disable: false

redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
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'
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:
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'
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:
Mraedis
Mraedis•2mo ago
You can use the ENV var REDIS_PORT to set a different port Also, please don't put your database on a network share
CatTrigger
CatTriggerOP•2mo ago
Whenever I try to change the port to a different number I receive this error:
Error: connect ECONNREFUSED 172.22.0.4:6380
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1634:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '172.22.0.4',
port: 6380
}
Error: connect ECONNREFUSED 172.22.0.4:6380
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1634:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '172.22.0.4',
port: 6380
}
How would I be able to correctly change the redis port? Update: I adjusted the docker compose redis with this:
redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
healthcheck:
test: redis-cli ping || exit 1
ports:
- '6380:6380'
command: redis-server --port 6380
restart: always
redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
healthcheck:
test: redis-cli ping || exit 1
ports:
- '6380:6380'
command: redis-server --port 6380
restart: always
Immich is now up. However, redis with
docker ps
docker ps
shows it's still using the same 6379/tcp port as the paperless redis. Is this a concern?
Mraedis
Mraedis•2mo ago
I think you still need to add
env_file:
- .env
env_file:
- .env
To the redis container
Zeus
Zeus•2mo ago
the proper way to set redis would be
environment:
REDIS_PORT=6380
environment:
REDIS_PORT=6380
you do not need ports: or command:
Mraedis
Mraedis•2mo ago
Yeah but putting that in the env file and adding the env file would do the same right? 👀
Zeus
Zeus•2mo ago
sure if you pass the env file in that would work.
CatTrigger
CatTriggerOP•2mo ago
REDIS_PORT in .env results in the ECONNREFUSED error I noted above Editing the docker-compose with ports: also results in the same, command: so far is the only thing that allowed immich to be present.
Zeus
Zeus•2mo ago
I am confused what problem you are trying to solve. Port conflicts are not an issue if the port is not mapped to the host, which immich does not do the error you originally posted is related to not being able to connect to the database
CatTrigger
CatTriggerOP•2mo ago
So two redis services sharing 6379/tcp isn't a concern?
Zeus
Zeus•2mo ago
it is not I recommend going back to a fully standard docker compose and env from the immich repo and then debug from there
CatTrigger
CatTriggerOP•2mo ago
It seems switching redis to 6380 made it work. I've tested every step from a standard docker compose and .env file.
-Originally, I got the cannot connect database error. -I then added the REDIS_PORT=6380 which resulted in the ECONN error. -I then added ports: 6380:6380 under the redis container for the docker-compose which did not result in a change. -it was only when I added the command: line that allowed the immich server to go up.
Zeus
Zeus•2mo ago
No description
CatTrigger
CatTriggerOP•2mo ago
gotcha
Zeus
Zeus•2mo ago
you probably fixed something else along the line
CatTrigger
CatTriggerOP•2mo ago
The only other thing I did was make postgre in .env ./postgre as opposed to the network share. However, that still resulted in the same errors I was receiving.
Zeus
Zeus•2mo ago
my guess is it hadn't applied properly when you first made that change
CatTrigger
CatTriggerOP•2mo ago
I mean, let me try. I'll docker compose down, and comment out the docker-compose changes I did You're right. That did it. I commented out the docker-compose changes and redis_port. Thank you again!
Immich
Immich•2mo ago
This thread has been closed. To re-open, use the button below.

Did you find this page helpful?