Docker 单容器部署
单容器方式适合快速体验或轻量使用,默认选择 H2 内置数据库。官方 latest 镜像同时提供 linux/amd64 和 linux/arm64。
需要 MySQL 和长期运行时,优先使用 Docker Compose 部署。
1. 创建持久化目录
mkdir -p surveyking/{config,db,files,logs}
cd surveyking
四个目录都要保留:
| 目录 | 内容 |
|---|---|
config | 初始化状态、数据库和运行配置 |
db | H2 数据库 |
files | 上传的图片和附件 |
logs | 运行日志 |
2. 启动容器
docker run -d \
--name surveyking \
--restart unless-stopped \
-p 1991:1991 \
-e SERVER_PORT=1991 \
-e JAVA_OPTS='-Xms256m -Xmx1g -Dfile.encoding=UTF-8' \
-v "$PWD/config:/app/config" \
-v "$PWD/db:/app/db" \
-v "$PWD/files:/app/files" \
-v "$PWD/logs:/app/logs" \
surveyking/surveyking:latest
查看启动日志:
docker logs -f surveyking
3. 完成初始化
打开:
http://localhost:1991
第一次进入 /setup 后选择 H2 内置数据库,填写系统信息并完成初始化。然后使用 admin / 123456 登录并立即修改密码。
服务管理
| 操作 | 命令 |
|---|---|
| 查看状态 | docker ps --filter name=surveyking |
| 查看日志 | docker logs -f surveyking |
| 停止 | docker stop surveyking |
| 启动 | docker start surveyking |
| 重启 | docker restart surveyking |
修改宿主机端口
如果 1991 被占用,删除并按原参数重建容器,只把端口映射改为:
-p 8080:1991
之后访问 http://localhost:8080。不要把容器内部端口一起改掉。
升级镜像
先从系统导出备份,并确认四个挂载目录存在,然后执行:
docker pull surveyking/surveyking:latest
docker stop surveyking
docker rm surveyking
再使用原来的 docker run 命令创建容器。只删除容器不会删除宿主机挂载目录,但路径写错会表现为一个全新的系统,重建前请仔细核对 $PWD。
常见问题
为什么重建容器后又进入 /setup?
通常是没有重新挂载原来的 config,或者在另一个目录执行了命令。检查容器的挂载:
docker inspect surveyking --format '{{json .Mounts}}'
SELinux 系统提示目录没有权限怎么办?
在 Fedora、Rocky Linux、AlmaLinux 等启用 SELinux 的系统上,可以给卷挂载加 :Z,例如:
-v "$PWD/files:/app/files:Z"
对 config、db、files 和 logs 使用相同处理,然后重建容器。