Docker 部署达梦8数据库:从踩坑到成功
·
最近在搞国产化技术栈,发现达梦数据库的 Docker 部署资料特别少,于是自己动手搞了一套,踩了不少坑,记录一下。
为什么要做这个
公司要求用国产数据库,选了达梦 DM8。手动部署太麻烦,装个环境就要半天。
我就想:能不能用 Docker 一键部署?
搜了一圈,资料真的少,只能自己摸索。
环境准备
- 系统:Kylin V10
- Docker + Docker Compose 已安装
- 磁盘空间 ≥ 8GB
- DM8 ISO 镜像(从达梦官网下载)
项目结构
kylin-dm8/
├── Dockerfile # 镜像构建
├── entrypoint.sh # 启动脚本
├── db_install.xml # 静默安装配置
├── docker-compose.yml # 一键部署
├── .env.example # 环境变量模板
└── docs/ # 截图
完整代码
Dockerfile
#定义构建参数,默认ISO文件名为dm8_20260317_x86_kylin10_sp3_64.iso
ARG DM8_ISO=dm8_20260317_x86_kylin10_sp3_64.iso
FROM cr.kylinos.cn/kylin/kylin-server-v10sp3-x86_64:20230324
ARG DM8_ISO
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
WORKDIR /mnt
COPY ${DM8_ISO} /mnt
COPY ./db_install.xml /mnt
RUN yum install -y bsdtar tar
ARG DM_DBA_PWD=Wuzhi666
RUN groupadd dinstall && \
useradd -g dinstall dmdba && \
echo "${DM_DBA_PWD}" | passwd --stdin dmdba
RUN mkdir /dm8 /mnt/dm8_install /mnt/install_cache && \
bsdtar -xf ${DM8_ISO} -C /mnt/dm8_install && \
chown -R dmdba:dinstall /dm8 /mnt/dm8_install /mnt/install_cache && \
chmod -R 700 /dm8 /mnt/dm8_install /mnt/install_cache
USER dmdba
ENV DM_INSTALL_TMPDIR=/mnt/install_cache
RUN /mnt/dm8_install/DMInstall.bin -q /mnt/db_install.xml && \
/dm8/script/root/root_installer.sh || true
EXPOSE 5236
USER root
RUN rm -rf /mnt/${DM8_ISO} \
/mnt/dm8_install \
/mnt/install_cache \
/mnt/db_install.xml \
/var/cache/yum/* \
&& yum clean all
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
WORKDIR /dm8
HEALTHCHECK --interval=30s --timeout=10s --retries=5 \
CMD /dm8/bin/disql SYSDBA/${SYSDBA_PWD:-Dameng123} -c "select 1;" || exit 1
ENTRYPOINT ["/entrypoint.sh"]
entrypoint.sh
#!/bin/bash
set -e
if [ ! -d "/dm8/data" ]; then
mkdir -p /dm8/data
fi
chown dmdba:dinstall /dm8/data
if [ ! -f "/dm8/data/DAMENG/dm.ini" ];then
echo "首次启动正在初始化达梦数据库..."
su - dmdba -c "/dm8/bin/dminit \
path=/dm8/data \
db_name=DAMENG \
instance_name=DMSERVER \
page_size=16 \
charset=1 \
SYSDBA_PWD=${SYSDBA_PWD:-Dameng123} \
SYSAUDITOR_PWD=${SYSAUDITOR_PWD:-Dameng123}"
echo "初始化完成!"
fi
echo "启动达梦数据库..."
exec su - dmdba -c "/dm8/bin/dmserver /dm8/data/DAMENG/dm.ini"
docker-compose.yml
services:
dm8:
build:
context: .
args:
- DM8_ISO=${DM8_ISO:-dm8_20260317_x86_kylin10_sp3_64.iso}
- DM_DBA_PWD=${DM_DBA_PWD:-Wuzhi666}
image: kylin-dm8:V1
container_name: dm8
restart: unless-stopped
ports:
- "5236:5236"
volumes:
- dm8_data:/dm8/data
environment:
- SYSDBA_PWD=${SYSDBA_PWD:-Dameng123}
- SYSAUDITOR_PWD=${SYSAUDITOR_PWD:-Dameng123}
volumes:
dm8_data:
.env.example
# DM8 Docker 部署配置
# 复制此文件为 .env,按需修改
# 构建参数(docker build / docker-compose build 时生效)
# DM8_ISO为你的dm8的ISO镜像,可以从达梦官网下载,当你的镜像名称和下面默认值不一致时,可以手动改为你的ISO镜像名
DM8_ISO=dm8_20260317_x86_kylin10_sp3_64.iso
# 达梦操作系统用户密码,可手动更改
DM_DBA_PWD=Wuzhi666
# 运行参数(容器启动时生效)
# SYSDBA 管理员密码(数据库连接用)可以手动更改管理员密码
SYSDBA_PWD=Dameng123
# SYSAUDITOR 审计员密码,可以手动更改审计日志密码
SYSAUDITOR_PWD=Dameng123
db_install.xml
<?xml version="1.0"?>
<DATABASE>
<LANGUAGE>en</LANGUAGE>
<TIME_ZONE>+08:00</TIME_ZONE>
<KEY></KEY>
<INSTALL_TYPE>0</INSTALL_TYPE>
<INSTALL_PATH>/dm8</INSTALL_PATH>
<INIT_DB>N</INIT_DB>
<CREATE_DB_SERVICE>N</CREATE_DB_SERVICE>
</DATABASE>
.gitignore
.env
*.iso
一键部署
# 1. 配置环境变量
cp .env.example .env
# 2. 启动
docker-compose up -d
# 3. 看日志
docker-compose logs -f
# 出现 "SYSTRM IS READY" 就成功了
连接信息:
- IP:服务器 IP
- 端口:5236
- 用户:SYSDBA
- 密码:Dameng123
效果展示
容器状态:

命令行查询:

DM管理工具:

踩坑记录
坑1:中文乱码
查出来的中文全是 ???,重装了3次才发现是编码问题。
解决:
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
坑2:容器秒退
启动后立马退出,日志也没报错。排查半天发现是权限问题。
解决: entrypoint.sh 里加:
chown dmdba:dinstall /dm8/data
坑3:ISO 解压失败
报错 bsdtar: Error,以为 ISO 坏了,下了3次…
其实是没装 bsdtar:
yum install -y bsdtar tar
坑4:磁盘空间不足
初始化时报 No space left on device,达梦初始化至少要 8GB。
df -h # 检查磁盘
常用命令
docker ps # 看状态
docker-compose logs -f # 看日志
docker-compose stop # 停止
docker-compose start # 启动
docker-compose down # 删除(数据保留)
docker-compose down -v # 删除(数据也删)
总结
Docker 部署达梦8,踩完坑之后其实很简单:一条命令启动,数据持久化,密码可配置。
项目地址: https://gitee.com/pengjia12345/kylin-dm8
更多推荐
所有评论(0)