跳到主要内容

Docker 单容器部署

单容器方式适合快速体验或轻量使用,默认选择 H2 内置数据库。官方 latest 镜像同时提供 linux/amd64linux/arm64

需要 MySQL 和长期运行时,优先使用 Docker Compose 部署

1. 创建持久化目录

mkdir -p surveyking/{config,db,files,logs}
cd surveyking

四个目录都要保留:

目录内容
config初始化状态、数据库和运行配置
dbH2 数据库
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"

configdbfileslogs 使用相同处理,然后重建容器。