连接外部数据库
连接外部PostgreSQL数据库的方法
如果您在使用过程中,遇到容器内的PostgreSQL数据库无法正常运行;
那么可以单独安装PostgreSQL,然后通过添加环境变量来连接外部数据库;
一、安装PostgreSQL数据库
提示:仅支持PostgreSQL数据库,不支持其他的数据库_
1.1. 下载镜像;
docker pull mtphotos/mt-photos-pg:latest
提示:当无法访问DockerHub时,请使用以下命令拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-pg:latest docker tag registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-pg:latest mtphotos/mt-photos-pg:latest
第1条命令为拉取镜像
第2条命令为将镜像标记为Docker hub源,这样可以在图形化创建容器时使用
另外还可以用arm-latest
标签的镜像,比如:docker pull mtphotos/mt-photos-pg:arm-latest
;
arm-latest
为ARM架构版本的最新镜像;
提示:由于人脸识别和以文搜图功能需要保存向量数据,因此需要数据库支持保存vector数据
如果不需要使用人脸识别和以文搜图功能,可以选择PostgreSQL的官方镜像
docker pull postgres:14
1.2. 创建用于存放数据库数据的目录;
由于docker容器在更新、重新创建后,内部的文件都会被重置;
所以需要映射宿主机的目录来用于持久化存储;
1.3. 新建并启动容器;
docker run -d \
--name mtphotos_pg \
-e POSTGRES_PASSWORD=myDbPassword \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v /custom/mount:/var/lib/postgresql/data \
-p 5432:5432 \
mtphotos/mt-photos-pg:latest
说明:
/custom/mount
为上一步创建的目录(即宿主机中的目录)- myDbPassword 为数据库密码,请记得修改
二、创建容器时增加环境变量
创建容器时,添加以下环境变量:
PostgreSQL相关的环境变量:
POSTGRES_HOST=192.168.1.108
POSTGRES_PORT=5432
POSTGRES_DATABASE=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=myDbPassword
192.168.1.108、myDbPassword 仅为举例,请记得替换
新建并启动容器:
docker run -d \
--name="mt-photos" \
-v /appdata/mt_photos/config:/config \
-v /appdata/mt_photos/upload:/upload \
-v /photos/folder1:/folder1 \
-v /photos/folder2:/folder2 \
-p 8063:8063 \
-e TZ="Asia/Shanghai" \
-e POSTGRES_HOST="192.168.1.108" \
-e POSTGRES_PORT="5432" \
-e POSTGRES_DATABASE="postgres" \
-e POSTGRES_USER="postgres" \
-e POSTGRES_PASSWORD="myDbPassword" \
--restart="unless-stopped" \
mtphotos/mt-photos:latest
使用docker-compose实现容器相互访问
使用depends_on,mtphotos容器内可以使用mtphotos_db访问数据库;
docker-compose.yaml 模板文件:
version: "3"
services:
mtphotos:
image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos:latest
container_name: mtphotos
restart: always
ports:
- 8063:8063
volumes:
- /volume1/docker/mt_photos/config:/config
- /volume1/photos/mt_photos_upload:/upload
- /volume1/xxx/其他需要映射的目录:/photos
environment:
- TZ=Asia/Shanghai
- LANG=C.UTF-8
- PUID=1000
- PGID=100
- POSTGRES_HOST=mtphotos_db
- POSTGRES_PASSWORD=my_db_pwd
depends_on:
- mtphotos_db
mtphotos_db:
image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-pg:latest
container_name: mtphotos_pg
restart: always
ports:
- 5432:5432
volumes:
- /volume1/docker/MTphotos_db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=my_db_pwd
- PGDATA=/var/lib/postgresql/data/pgdata
my_db_pwd 为数据库密码,可以修改
yaml语法三大规则
规则一:缩进
yaml使用一个固定的缩进风格表示数据层结构关系,需要每个缩进级别由两个空格组成。一定不能使用tab键
规则二:冒号
services: image: mtphotos/mt-photos:latest
每个冒号后面一定要有一个空格(以冒号结尾不需要空格)
规则三:短横线
想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分
environment: - TZ=Asia/Shanghai - LANG=C.UTF-8 - PUID=1000 - PGID=100