news 2026/4/15 20:56:03

Kylin V11 实战:PostgreSQL 18 容器化部署,别再被参数坑了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kylin V11 实战:PostgreSQL 18 容器化部署,别再被参数坑了

在信创环境中部署 PostgreSQL,很多人以为只要 “系统能装 Docker,一切就和CentOS 一样”。

但真正动手后,问题往往来得非常快:命令明明没写错,却提示 unknown flag容器能起,数据却写不进去教程照着敲,在国产系统上却频频翻车。

这并不是 PostgreSQL 的问题,也不完全是 Docker 的锅,而是国产操作系统 + 容器工具链差异叠加后,暴露出的那些“平时不显眼、上线就致命”的细节。

本文基于 银河麒麟 Kylin V11 的真实部署过程,记录 PostgreSQL 18 容器化落地时遇到的关键问题,尤其是 Docker 与 Podman 参数差异、SELinux 挂载限制 这两个高频雷区。

如果你希望在国产环境中一次性跑通、可复用、可交付 PostgreSQL 容器部署,这篇实战笔记,值得你完整看完。

01

背景与环境

随着信创产业的发展,银河麒麟 (Kylin V11) 已成为国产化替代的主流操作系统之一。

作为一款基于 Linux 内核(通常兼容RHEL/CentOS 体系)的系统,它对 Docker 容器技术有着良好的支持。

本文将记录如何在 Kylin V11 环境下,使用Docker 快速部署最新的 PostgreSQL 18 数据库,并重点复盘在实验过程中遇到的 Docker 与 Podman 参数差异问题。

• 操作系统

Kylin V11

• 容器引擎

Docker CE

• 数据库镜像

PostgreSQL 18 (通过镜像加速器拉取)

02

镜像获取 (Image Pull)

由于 Docker Hub 官方源在网络上的不确定性,本次实验使用了镜像加速地址 docker.1ms.run 进行拉取。

1

拉取镜像

执行拉取命令,可以看到分层下载的过程非常顺畅:

[root@pg-prod-db01 ~]# docker pull docker.1ms.run/postgres:18 18: Pulling from postgres 119d43eec815: Pull complete e086e98b1962: Pull complete d3b2038f0307: Pull complete ade980a94d87: Pull complete dcc21a450f56: Pull complete 617e7a31540f: Pull complete 7029853d8f47: Pull complete 05c02d5e0a60: Pull complete 2cb1625cf212: Pull complete 97457a8dcb7d: Pull complete b5e23963a3cd: Pull complete c1bb9e333b95: Pull complete fdfe2104fb23: Pull complete Digest: sha256:5773fe724c49c42a7a9ca70202e11e1dff21fb7235b335a73f39297d200b73a2 Status: Downloaded newer image for docker.1ms.run/postgres:18 docker.1ms.run/postgres:18

2

验证镜像

下载完成后,通过 docker images 确认镜像已正确落地,镜像 ID 为 019965b81888,大小约为 456MB。

[root@pg-prod-db01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.1ms.run/postgres 18 019965b81888 8 days ago 456MB

03

存储准备 (Storage Prep)

为了防止容器删除后数据丢失,我们需要在宿主机上创建持久化目录。

由于 Kylin V11 通常默认开启 SELinux,目录的创建位置和后续的挂载标签(:Z)尤为重要。

[root@pg-prod-db01 ~]# mkdir -p /root/postgresql/data

04

容器启动与排错 (Deploy &

Troubleshooting)

在启动环节,我们遇到了一个典型的参数兼容性问题,这是从 RHEL/Podman 环境迁移到标准 Docker 环境时常见的“坑”。

1

首次尝试(失败:参数不兼容)

最初我们尝试使用带有 --replace 参数的命令,该参数在 Podman 中用于自动替换同名容器。

执行命令:

docker run -d \ --name pg18 \ --replace \ -p 5432:5432 \ -e POSTGRES_PASSWORD=123456 \ -e POSTGRES_USER=postgres \ -e POSTGRES_DB=testdb \ -v /root/postgresql/data:/var/lib/postgresql:Z \ docker.1ms.run/postgres:18

报错信息

unknown flag: --replace See 'docker run --help'.

问题分析

--replace 是 Podman 的特有参数。在 Kylin V11 上安装的标准 Docker CE 无法识别此参数。

在 Docker 中,如果容器名冲突,必须先手动 rm。

2

修正后再次尝试(成功)

去掉 --replace 参数后,再次执行命令。

特别注意保留了:Z 参数,这对 Kylin V11 的 SELinux 权限放行至关重要。

修正后的命令:

[root@pg-prod-db01 ~]# docker run -d \ --name pg18 \ -p 5432:5432 \ -e POSTGRES_PASSWORD=123456 \ -e POSTGRES_USER=postgres \ -e POSTGRES_DB=testdb \ -v /root/postgresql/data:/var/lib/postgresql:Z \ docker.1ms.run/postgres:18

执行结果

返回了一串容器 ID,说明后台启动成功。

3e56b64df92e675a960a1bf7012631646f5827fc48ef0bf32a20723324bae635

05

环境验证与验收 (Verification)

容器启动后,我们需要确认数据库进程是否稳定,以及版本是否正确。

1

进程状态检查

使用 docker ps 查看容器状态。

[root@pg-prod-db01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3e56b64df92e docker.1ms.run/postgres:18 "docker-entrypoint.s…" 31 seconds ago Up 24 seconds 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp pg18

关键指标解读

  • STATUS: Up 24 seconds。状态正常,未出现 Restarting 或 Exited。

  • PORTS: 0.0.0.0:5432->5432/tcp。

说明 IPv4 和 IPv6 的 5432 端口均已正确映射,外部可连接。

2

数据库内部连接测试

我们使用 docker exec 直接进入容器内部,使用自带的 psql 客户端连接刚创建的 testdb 数据库。

执行命令:

docker exec -it -u postgres pg18 psql -d testdb

输出验证:

psql (18.1 (Debian 18.1-1.pgdg13+2)) Type "help" for help. testdb=# \l

验收结论

  • 版本确认

输出显示 psql (18.1 ...),证明 PostgreSQL 18.1 已成功运行。

  • 业务库就绪

提示符为 testdb=#,说明初始化参数 -e POSTGRES_DB=testdb 生效。

  • 权限正常

能够执行 \l 查看数据库列表,说明 postgres 超级用户权限正常。

写在最后

在国产操作系统上跑 PostgreSQL,真正的难点,从来不是数据库版本够不够新。

而是你是否清楚:

  • 你用的是 Docker,还是 Podman?

  • SELinux 是否在悄悄拦截你的数据目录?

  • 教程里的参数,是否真的适配当前环境?

本次在银河麒麟 Kylin V11 下的实践再次印证了一点:容器化降低了部署门槛,但并没有消灭系统差异。

尤其是在信创环境中,每一个“看似无关紧要”的参数,都可能成为上线时的阻断点。

好消息是,只要认清工具边界、尊重系统安全机制,PostgreSQL 18 在国产操作系统上的运行,完全可以做到稳定、持久、可复用。

当你把这些坑提前踩完,剩下的,就只是一次标准、健康的数据库交付流程了。

原文链接:https://mp.weixin.qq.com/s/oDoloejpUBw-AaZydhycgg

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 7:58:05

杰理之GPIO【篇】

状态说明 • 方向:有输入,有输出,无开漏。 • 上下拉:所有IO都有上下拉, 电阻固定, 但不同芯片, 或不同引脚的阻值是有差异的, 具体看芯片的规格书。输入状态才有上下拉。 • 水平:输出高(电压接近于VDDIO电压)&#x…

作者头像 李华
网站建设 2026/4/11 5:00:06

UTF-8 编码的二进制字节序列的庖丁解牛

UTF-8 编码的二进制字节序列 是 Unicode 码点到字节流的可变长度编码方案,其核心在于 用前缀标记字节数,用后续字节承载数据,实现 ASCII 兼容与全球字符支持的统一。一、核心原理:可变长度编码规则 ▶ 1. UTF-8 编码模板&#xff…

作者头像 李华
网站建设 2026/4/10 17:35:43

基于Spring Boot的高校科研管理系统的设计与实现(毕业论文)

摘 要 科研水平是高校的软实力的重要体现部分,随着高校科研项目的增多,传统的高校科研管理中存在的信息孤岛、流程繁琐、数据统计低效等弊端。为了提高科研管理的效率,本项目开发一个基于Spring Boot的高校科研管理系统,采用前后端…

作者头像 李华
网站建设 2026/4/12 15:26:02

自动化测试脚本自修复机制:设计架构与效能优化路径

行业痛点与修复机制价值‌ ‌维护成本困境‌ 据统计,UI自动化脚本平均在30%的迭代周期中因页面元素变更而失效,导致测试流程频繁中断。传统依赖人工排查和修复的方式,不仅效率低下,还占用了测试团队高达40%的有效工时,…

作者头像 李华
网站建设 2026/4/11 1:58:38

手把手教你用Ollama运行Phi-3-mini智能对话

手把手教你用Ollama运行Phi-3-mini智能对话 你是不是也遇到过这些情况:想在本地跑一个轻量又聪明的AI模型,但发现动辄十几GB的模型根本塞不进笔记本;或者试了几个大模型,结果响应慢、耗电高、还总卡顿?今天要介绍的这…

作者头像 李华