单机部署最小归档服务集
本教程介绍如何在一台服务器上,用 Docker 快速部署一套可用的 DICOM 归档环境,包含三个核心服务:
- OpenLDAP:归档配置
- PostgreSQL:业务数据库
- WildFly + Archive:DICOM / HL7 / Web 归档应用
推荐优先使用 Docker Compose,步骤更简单;也可以使用 Docker 命令行逐步启动。
部署前准备
- 已安装 Docker(建议同时安装 Docker Compose)
- 确认宿主机存在时区文件;若没有,先创建:
echo "Asia/Shanghai" > /etc/timezone
没有
/etc/timezone时,PostgreSQL / 归档容器可能无法启动。
3.(可选)创建专用系统用户,方便查看数据目录属主:
sudo -i
groupadd -r slapd-dcm4chee --gid=1021 && useradd -r -g slapd-dcm4chee --uid=1021 slapd-dcm4chee
groupadd -r postgres-dcm4chee --gid=999 && useradd -r -g postgres-dcm4chee --uid=999 postgres-dcm4chee
groupadd -r dcm4chee-arc --gid=1023 && useradd -r -g dcm4chee-arc --uid=1023 dcm4chee-arc
exit
方式一:Docker Compose(推荐)
1. 创建配置文件
在任意目录新建 docker-compose.yml:
version: "3"
services:
ldap:
image: dcm4che/slapd-dcm4chee:2.6.15-35.2
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "389:389"
environment:
STORAGE_DIR: /storage/fs1
volumes:
- /var/local/dcm4chee-arc/ldap:/var/lib/openldap/openldap-data
- /var/local/dcm4chee-arc/slapd.d:/etc/openldap/slapd.d
db:
image: dcm4che/postgres-dcm4chee:17.9-35
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "5432:5432"
environment:
POSTGRES_DB: pacsdb
POSTGRES_USER: pacs
POSTGRES_PASSWORD: pacs
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/db:/var/lib/postgresql/data
arc:
image: dcm4che/dcm4chee-arc-psql:5.35.2
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "8080:8080"
- "8443:8443"
- "9990:9990"
- "9993:9993"
- "11112:11112"
- "2762:2762"
- "2575:2575"
- "12575:12575"
environment:
POSTGRES_DB: pacsdb
POSTGRES_USER: pacs
POSTGRES_PASSWORD: pacs
WILDFLY_CHOWN: /storage
WILDFLY_WAIT_FOR: ldap:389 db:5432
depends_on:
- ldap
- db
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone
- /var/local/dcm4chee-arc/storage:/storage
如果启动归档时提示内存不足,可在 arc 服务中增加:
security_opt:
- seccomp:unconfined
2. 一键启动
docker-compose -p dcm4chee up -d
3. 日常运维
# 停止
docker-compose -p dcm4chee stop
# 启动
docker-compose -p dcm4chee start
# 停止并删除容器(数据仍保留在宿主机目录)
docker-compose -p dcm4chee down
方式二:Docker 命令行
1. 创建网络
docker network create dcm4chee_network
2. 启动 OpenLDAP
docker run --network=dcm4chee_network --name ldap \
-p 389:389 \
-v /var/local/dcm4chee-arc/ldap:/var/lib/openldap/openldap-data \
-v /var/local/dcm4chee-arc/slapd.d:/etc/openldap/slapd.d \
-d dcm4che/slapd-dcm4chee:2.6.15-35.2
说明:
-p 389:389仅用于外部 LDAP 客户端访问;归档容器通过桥接网络连接 LDAP,不依赖该映射。- 数据与配置已挂载到宿主机,删除/重建容器不会丢失。
如需自定义初始化参数,可追加环境变量(示例):
-e LDAP_BASE_DN=dc=ihe,dc=net \
-e LDAP_ROOTPASS=mypass \
-e ARCHIVE_DEVICE_NAME=central-archive \
-e AE_TITLE=CENTRAL \
-e DICOM_PORT=10104 \
-e HL7_PORT=12575 \
-e STORAGE_DIR=/storage/fs1
若修改了
LDAP_BASE_DN、LDAP_ROOTPASS、ARCHIVE_DEVICE_NAME,归档容器也必须设置相同值,否则无法连接 LDAP 或找不到配置。
不传以上参数时,使用默认值:dc=dcm4che,dc=org / secret / dcm4chee-arc / DCM4CHEE / 11112 / 2575 / /opt/wildfly/standalone/data/fs1。
3. 启动 PostgreSQL
docker run --network=dcm4chee_network --name db \
-p 5432:5432 \
-e POSTGRES_DB=pacsdb \
-e POSTGRES_USER=pacs \
-e POSTGRES_PASSWORD=pacs \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/db:/var/lib/postgresql/data \
-d dcm4che/postgres-dcm4chee:17.9-35
说明:
-p 5432:5432仅用于外部数据库客户端;归档容器通过桥接网络连库。POSTGRES_*必须与归档容器保持一致。
4. 启动归档服务
docker run --network=dcm4chee_network --name arc \
-p 8080:8080 \
-p 8443:8443 \
-p 9990:9990 \
-p 9993:9993 \
-p 11112:11112 \
-p 2762:2762 \
-p 2575:2575 \
-p 12575:12575 \
-e POSTGRES_DB=pacsdb \
-e POSTGRES_USER=pacs \
-e POSTGRES_PASSWORD=pacs \
-e WILDFLY_WAIT_FOR="ldap:389 db:5432" \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone \
-d dcm4che/dcm4chee-arc-psql:5.35.2
WILDFLY_WAIT_FOR 会等待 LDAP 和数据库就绪后再启动,避免重启时连接失败。
自定义存储目录时
若 LDAP 中设置了 STORAGE_DIR=/storage/fs1,请额外挂载并保证可写:
sudo mkdir -p /var/local/dcm4chee-arc/storage
sudo chown 1023:1023 /var/local/dcm4chee-arc/storage
启动时补充:
-v /var/local/dcm4chee-arc/storage:/storage \
-e WILDFLY_CHOWN="/opt/wildfly/standalone /storage"
默认存储路径 /opt/wildfly/standalone/data/fs1 已包含在 wildfly 挂载中,一般无需额外处理。
HTTPS 证书
默认 HTTPS 使用内置证书:

若要消除浏览器安全提示,可提供与主机名匹配、由受信任机构签发的证书(PKCS#12 或 JKS),挂载进容器后通过环境变量 KEYSTORE 指定。
5. 启停与清理
docker stop ldap db arc
docker start ldap db arc
docker rm -v ldap db arc
docker network rm dcm4chee_network
常用访问入口
将下面的 服务器IP 替换为实际主机地址即可。
Archive UI
WildFly 管理控制台
默认账号:root / changeit
DICOM Web 服务
IHE XDS-I
验证是否部署成功
1. 查看归档日志
tail -f /var/local/dcm4chee-arc/wildfly/log/server.log
看到监听端口启动、应用部署成功,即表示服务已就绪。
2. 打开 Web 界面
浏览器访问 Archive UI(见上方「常用访问入口」)。
3. 发送测试影像(可选)
若按 Docker Compose 部署:
docker run --rm --network=dcm4chee_default dcm4che/dcm4che-tools storescu -c DCM4CHEE@arc:11112 /opt/dcm4che/etc/testdata/dicom
若按 Docker 命令行部署:
docker run --rm --network=dcm4chee_network dcm4che/dcm4che-tools storescu -c DCM4CHEE@arc:11112 /opt/dcm4che/etc/testdata/dicom
若网络名不一致,先执行
docker network ls查看实际网络名称。
发送成功后,可在 Web 界面中查看到测试影像:

常用端口
| 端口 | 用途 |
|---|---|
| 8080 / 8443 | Web 访问 |
| 9990 / 9993 | 管理控制台 |
| 11112 | DICOM |
| 2762 | DICOM TLS |
| 2575 | HL7 |
| 12575 | HL7 TLS |
| 389 | LDAP(可选映射,供外部客户端) |
| 5432 | PostgreSQL(可选映射,供外部客户端) |
使用提示
- 数据库账号密码要与归档服务保持一致,否则无法连库。
- LDAP 中修改了关键参数后,归档服务也要同步配置。
- 数据目录挂载到宿主机后,删除容器不会丢失配置与影像数据。
- 生产环境请修改数据库与 WildFly 默认密码,并按实际需求配置 HTTPS 证书(
KEYSTORE)。
评论区