公司的Confluence越来越慢,查看了一下日志,好多数据库连接超过最大数错误,另外由于数据库有很多定时任务,磁盘读写频繁,所以选择在另一台机器上重建一个数据库。

由于Confluence是破解的,如果每次创建新容器序列号会变,所以原有的Confluence容器不能删除。

由于同一台机器可能有多个数据库实例服务于不同的应用,所以不能将数据库端口映射到主机上,那么在confluence中如何填写数据库连接呢?

Docker会默认将容器添加到bridge中,但是bridge网络内的容器不能通过容器名访问,所以需要新建network并将已有的Confluence容器和新建的数据库容器添加进来。如果一开始就决定是组合应用的话,使用docker-compose最方便,此次情况是作修改。

1
2
3
docker network create confluence-network # 新建一个network
docker network connect confluence-network herisk-confluence # 把容器herisk-confluence添加到confluence-network 中
docker run --name confluence-postgres -v confluence-postgres-db:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres --network=confluence-network -d postgres #创建数据库容器并添加到confluence-network中

备份和恢复数据库使用pg_dump 和 pg_restore比较简单,就不在赘述了。

修改Confluence 的配置文件confluence.cfg.xml,数据库连接的主机部分填写数据库容器名即可,本例中为jdbc://confluence-postgres-db:5432/confluence

参考

[1]. Docker container networking
[2]. 使用 psql 命令迁移 PostgreSQL 数据