[当我尝试通过kubernetes部署postgres时,我已经通过创建configmap和秘密文件来填充所有必需的环境变量,例如POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DATABASE等。容器已成功部署,我可以通过“ kubectl exec”命令打开其终端。当我运行“ env”命令时,可以看到在部署过程中提供的所有环境变量均已成功设置。但是当我尝试运行时:
psql -U testuser -d testdb
它提供两种类型的错误:
psql:无法连接到服务器:致命:角色'testuser'不存在
psql:无法连接到服务器:致命:数据库'testdb'不存在
经过大量研究,我发现即使在设置环境变量之后,也不会初始化用户和数据库。因此,我创建了一个init.sql文件并将其添加到docker-entrypoint-initdb.d中以构建自定义映像,将其推送到docker hub并通过该映像在kubernetes中部署postgres。
init.sql文件内容:
CREATE USER testuser WITH SUPERUSER PASSWORD test;
CREATE DATABASE testdb;
GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
Dockerfile内容:
FROM postgres:latest
ADD init.sql /docker-entrypoint-initdb.d/
EXPOSE 5432
仍然,我遇到相同的错误。用户和数据库尚未初始化...请为此帮助我
UPDATE:
日志:
PostgreSQL Database directory appears to contain a database; Skipping initialization
2020-04-15 09:50:06.855 UTC [1] LOG: starting PostgreSQL 12.2 (Debian 12.2-2.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
2020-04-15 09:50:06.855 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2020-04-15 09:50:06.855 UTC [1] LOG: listening on IPv6 address "::", port 5432
2020-04-15 09:50:07.000 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-04-15 09:50:07.204 UTC [26] LOG: database system was interrupted; last known up at 2020-04-15 09:50:02 UTC
2020-04-15 09:50:07.781 UTC [26] LOG: database system was not properly shut down; automatic recovery in progress
2020-04-15 09:50:07.815 UTC [26] LOG: invalid record length at 0/16453B0: wanted 24, got 0
2020-04-15 09:50:07.815 UTC [26] LOG: redo is not required
2020-04-15 09:50:08.034 UTC [1] LOG: database system is ready to accept connections
这里已经提到了“跳过初始化”
FROM postgres:latest
ADD init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh
EXPOSE 5432