harbor-db重启报错:initdb: error: directory "/var/lib/postgresql/da..

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: harbor-db重启报错:initdb: error: directory "/var/lib/postgresql/da..

报错信息:


harbor-db容器重启报错:initdb: error: directory “/var/lib/postgresql/data/pg13“ exists but is not empty


现象:


 在重启docker服务或者通过docker-compose重启harbor服务时,harbor-db容器都一直处于Restarting状态,无法恢复UP状态。

1.png

Harbor版本:v2.3.2


查看日志:


1.查看harbor所有容器启动日志路径

[root@k8s-master harbor]# vim harbor.yml
...
112 # Log configurations
113 log:
114   # options are debug, info, warning, error, fatal
115   level: info
116   # configs for logs in local storage
117   local:
118     # Log files are rotated log_rotate_count times before being removed. If count is 0, old versions are remov    ed rather than rotated.
119     rotate_count: 50
120     # Log files are rotated only if they grow bigger than log_rotate_size bytes. If size is followed by k, the     size is assumed to be in kilobytes.
121     # If the M is used, the size is in megabytes, and if G is used, the size is in gigabytes. So size 100, siz    e 100k, size 100M and size 100G
122     # are all valid.
123     rotate_size: 200M
124     # The directory on your host that store log
125     location: /var/log/harbor        //Harbor所有容器运行的日志存放路径

2.查看harbor-db容器启动日志

[root@k8s-master harbor]# cat /var/log/harbor/postgresql.log | tail -20
...
Oct 13 08:14:22 172.23.0.1 postgresql[28777]: This user must also own the server process.
Oct 13 08:14:22 172.23.0.1 postgresql[28777]:
Oct 13 08:14:22 172.23.0.1 postgresql[28777]: The database cluster will be initialized with locales
Oct 13 08:14:22 172.23.0.1 postgresql[28777]:   COLLATE:  en_US.UTF-8
Oct 13 08:14:22 172.23.0.1 postgresql[28777]:   CTYPE:    en_US.UTF-8
Oct 13 08:14:22 172.23.0.1 postgresql[28777]:   MESSAGES: C
Oct 13 08:14:22 172.23.0.1 postgresql[28777]:   MONETARY: C
Oct 13 08:14:22 172.23.0.1 postgresql[28777]:   NUMERIC:  C
Oct 13 08:14:22 172.23.0.1 postgresql[28777]:   TIME:     C
Oct 13 08:14:22 172.23.0.1 postgresql[28777]: The default text search configuration will be set to "english".
Oct 13 08:14:22 172.23.0.1 postgresql[28777]:
Oct 13 08:14:22 172.23.0.1 postgresql[28777]: Data page checksums are disabled.
Oct 13 08:14:22 172.23.0.1 postgresql[28777]:
Oct 13 08:14:22 172.23.0.1 postgresql[28777]: initdb: error: directory "/var/lib/postgresql/data/pg13" exists but is not empty
Oct 13 08:14:22 172.23.0.1 postgresql[28777]: If you want to create a new database system, either remove or empty
Oct 13 08:14:22 172.23.0.1 postgresql[28777]: the directory "/var/lib/postgresql/data/pg13" or run initdb
Oct 13 08:14:22 172.23.0.1 postgresql[28777]: with an argument other than "/var/lib/postg

2.png

解决:


 1.从上面日志中的提示directory "/var/lib/postgresql/data/pg13" exists but is not empty可以清楚/var/lib/postgresql/data/pg13这个目录存在,并且不为空,但是在宿主机上找不到这个目录。

[root@k8s-master harbor]# ll /var/lib/postgresql/data/pg13
ls: 无法访问/var/lib/postgresql/data/pg13: 没有那个文件或目录

 2.于是想到查看一下docker-compose的yaml文件,查看一下harbor-db容器的挂载目录的信息。

[root@k8s-master harbor]# vim docker-compose.yml
...
postgresql:
    image: goharbor/harbor-db:v2.3.2
    container_name: harbor-db
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - DAC_OVERRIDE
      - SETGID
      - SETUID
    volumes:
      - /home/harbor/data/database:/var/lib/postgresql/data:z     //挂载目录信息
    networks:
      harbor:
    dns_search: .
    env_file:
      - ./common/config/db/env
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "postgresql"
...

 3.从docker-compose.yaml文件中可以看到宿主机上的/home/harbor/data/database目录挂载到容器中的/var/lib/postgresql/data目录下,那会不会是/home/harbor/data/database目录不为空呢?删除掉它试试。

[root@k8s-master harbor]# rm -rf /home/harbor/data/database

 4.删除/home/harbor/data/database目录后将harbor运行的容器删除,在重新创建并启动。

[root@k8s-master harbor]# docker-compose down -v
Stopping harbor-jobservice ... done
Stopping nginx             ... done
Stopping harbor-core       ... done
Stopping redis             ... done
Stopping harbor-portal     ... done
Stopping harbor-db         ... done
Stopping registry          ... done
Stopping registryctl       ... done
Stopping harbor-log        ... done
Removing harbor-jobservice ... done
Removing nginx             ... done
Removing harbor-core       ... done
Removing redis             ... done
Removing harbor-portal     ... done
Removing harbor-db         ... done
Removing registry          ... done
Removing registryctl       ... done
Removing harbor-log        ... done
Removing network harbor_harbor
[root@k8s-master harbor]# docker-compose up -d
Creating nginx ... done
Creating registryctl ...
Creating registry ...
Creating harbor-db ...
Creating redis ...
Creating harbor-portal ...
Creating harbor-core ...
Creating harbor-jobservice ...
Creating nginx ...
[root@k8s-master harbor]# docker-compose ps
      Name                     Command               State             Ports
--------------------------------------------------------------------------------------
harbor-core         /harbor/entrypoint.sh            Up
harbor-db           /docker-entrypoint.sh            Up
harbor-jobservice   /harbor/entrypoint.sh            Up
harbor-log          /bin/sh -c /usr/local/bin/ ...   Up      127.0.0.1:1514->10514/tcp
harbor-portal       nginx -g daemon off;             Up
nginx               nginx -g daemon off;             Up      0.0.0.0:80->8080/tcp
redis               redis-server /etc/redis.conf     Up
registry            /home/harbor/entrypoint.sh       Up
registryctl         /home/harbor/start.sh            Up

 可以看到harbor-db已经启动成功,恢复正常了。


原因:


 1.出现如上的原因很大可能是之前在这台机器上安装过Harbor服务,第一次安装的时候在挂载目录下创建了数据,再次安装时需要将之前的脏数据都清空才可以;


 2.还遇到过一种情况,那就是在清理了挂载目录的脏数据之后重启docker服务或者使用docker-compose重启Harbor服务时,harbor-db容器还是一直处于Restarting状态,这种情况下可以将Harbor所有容器都down -v删除掉,修改harbor.yaml中data_volume数据挂载目录,再重新up -d(成功过)。或者换一个Harbor的版本,实测Harbor v2.1.1版本可以(之前是Harbor v2.3.2)。


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3月前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错之往GREENPLUM 6 写数据,用postgresql-42.2.9.jar 报 ON CONFLICT (uuid) DO UPDATE SET 语法有问题。怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
9月前
|
关系型数据库 PostgreSQL
解决Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
解决Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
886 0
|
2月前
|
消息中间件 Java 关系型数据库
实时计算 Flink版操作报错合集之从 PostgreSQL 读取数据并写入 Kafka 时,遇到 "initial slot snapshot too large" 的错误,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
971 0
|
3月前
|
SQL 关系型数据库 数据库
实时计算 Flink版操作报错之使用SQL 将 PostgreSQL 的 date 类型字段转换为 TIMESTAMP 类型时遇到报错,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之使用连接串模式新增PostgreSQL数据源时遇到了报错"not support data sync channel, error code: 0001",该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
1月前
|
SQL 监控 关系型数据库
实时计算 Flink版操作报错合集之在设置监控PostgreSQL数据库时,将wal_level设置为logical,出现一些表更新和删除操作报错,怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之在处理PostgreSQL数据库遇到报错。该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
SQL 关系型数据库 数据库
nacos 2.2.3版本 查看配置文件的历史版本的接口 是针对MySQL数据库的sql 改成postgresql后 sql语句报错 该怎么解决
在Nacos 2.2.3中切换到PostgreSQL后,执行配置文件历史版本分页查询出错,因`LIMIT 0, 10`语法不被PostgreSQL支持,需改为`LIMIT 10 OFFSET 0`。仅当存在历史版本时报错。解决方案是调整查询SQL以兼容PostgreSQL语法。
|
3月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错之遇到报错org.postgresql.util.psqlexception: The connection attempt failed.,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3月前
|
SQL 关系型数据库 分布式数据库
PolarDB for PostgreSQL报错问题之poll报错如何解决
PolarDB for PostgreSQL是基于PostgreSQL开发的一款云原生关系型数据库服务,它提供了高性能、高可用性和弹性扩展的特性;本合集将围绕PolarDB(pg)的部署、管理和优化提供指导,以及常见问题的排查和解决办法。