1. 下载安装 docker
1.1 下载docker
访问 Docker 官方静态二进制下载页面: https://download.docker.com/linux/static/stable/

根据你的系统架构选择对应目录(通常是 x86_64),然后下载最新的 .tgz 文件。例如:

或者通过命令行下载
wget https://download.docker.com/linux/static/stable/x86_64/docker-29.8.2.tgz
1.2 安装docker
# 解压 Docker 安装包
tar -xvf docker-29.8.2.tgz
# 将 docker 目录下的所有可执行文件复制到 /usr/bin
sudo cp docker/* /usr/bin/
# 查看 docker 版本
docker --version
1.3 配置国内镜像源
如果 /etc/docker/daemon.json 文件不存在,需要先创建目录,然后编辑文件
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
将以下内容粘贴到文件中(可配置多个镜像源,Docker 会按顺序尝试)
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
注意 :镜像源地址不要 加尾部斜杠。如果文件中已有其他配置(如代理),只需添加 registry-mirrors 字段,不要覆盖原有内容。
在 nano 中按 Ctrl + X,再按 Y,最后按 Enter。
重载配置并重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
1.4 测试docker
1.4.1 拉取镜像
sudo docker pull hello-world
拉取得到的镜像的默认存储位置位于:/var/lib/docker
下载的镜像不是一个单独的文件,而是被 Docker 按"分层存储"的方式拆开存放在 Docker 的数据目录里。
在这个目录下,和 hello-world 镜像相关的主要有
| 路径 | 内容 |
|---|---|
/var/lib/docker/image/overlay2/imagedb/content/sha256/ |
镜像元数据,如镜像 ID、配置信息 |
/var/lib/docker/image/overlay2/repositories.json |
镜像名称和标签与镜像 ID 的对应关系 |
/var/lib/docker/overlay2/ |
镜像层数据,每个层一个目录 |
/var/lib/docker/overlay2/<层ID>/diff/ |
该层实际的文件内容 |
hello-world 镜像非常小,它的可执行文件 hello 就在某一层的 diff 目录中。
1.4.2 运行镜像
sudo docker images # 查看当前下载了哪些镜像
sudo docker run hello-world # 启动 hello world 镜像
如果docker正常安装,会得到以下输出
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
...
1.5 添加sudo权限
# 1. 先确认 docker 组(安装 docker 一般自动建好)
getent group docker
# 2. 没有输出就手动创建:
sudo groupadd docker
# 3. 将当前用户加入 docker 组
sudo usermod -aG docker $USER
给docker添加sudo权限后,再执行docker命令就不用再添加 sudo 命令在前面了。
2. 下载安装 docker-compose
2.1 下载docker-compose
访问docker-compose的发布地址: https://github.com/docker/compose/releases ,

在"Assets"下面找到"docker-compose-linux-x86_64",点击下载

只要这一个文件即可。
2.2 安装docker-compose
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
3. 创建 docker-compose.groups.yml文件
创建一个新文件夹,作为onlyoffice的工作目录
mkdir ~/onlyoffice-workspace # 创建文件夹
cd ~/onlyoffice-workspace # 进入文件夹
nano docker-compose.groups.yml # 创建yml文件
将以下文件复制进docker-compose.groups.yml 文件。
services:
onlyoffice-mysql-server:
container_name: onlyoffice-mysql-server
image: mysql:8.0.29
environment:
- MYSQL_ROOT_PASSWORD=my-secret-pw
command:
--default-authentication-plugin=mysql_native_password
--sql_mode=NO_ENGINE_SUBSTITUTION
networks:
- onlyoffice
stdin_open: true
tty: true
restart: always
volumes:
- ./config/mysql/conf.d:/etc/mysql/conf.d
- ./config/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- mysql_data:/var/lib/mysql
onlyoffice-community-server:
container_name: onlyoffice-community-server
image: onlyoffice/communityserver:12.6.0.1900
depends_on:
- onlyoffice-mysql-server
- onlyoffice-elasticsearch
- onlyoffice-document-server
environment:
- ONLYOFFICE_CORE_MACHINEKEY=core_secret
- ONLYOFFICE_EXTERNAL_URL=http://192.168.1.9
- ONLYOFFICE_MAIL_ENABLED=false
- CONTROL_PANEL_PORT_80_TCP=80
- CONTROL_PANEL_PORT_80_TCP_ADDR=onlyoffice-control-panel
- MYSQL_SERVER_ROOT_PASSWORD=my-secret-pw
- MYSQL_SERVER_DB_NAME=onlyoffice
- MYSQL_SERVER_HOST=onlyoffice-mysql-server
- MYSQL_SERVER_USER=onlyoffice_user
- MYSQL_SERVER_PASS=onlyoffice_pass
- ELASTICSEARCH_SERVER_HOST=onlyoffice-elasticsearch
- ELASTICSEARCH_SERVER_HTTPPORT=9200
- DOCUMENT_SERVER_PORT_80_TCP_ADDR=onlyoffice-document-server
- DOCUMENT_SERVER_JWT_ENABLED=true
- DOCUMENT_SERVER_JWT_SECRET=MySuperSecretKey123456
networks:
- onlyoffice
ports:
- '80:80'
- '443:443'
- '5222:5222'
stdin_open: true
tty: true
restart: always
privileged: true
cgroup: host
volumes:
- community_data:/var/www/onlyoffice/Data
- community_log:/var/log/onlyoffice
- community_letsencrypt:/etc/letsencrypt
- /sys/fs/cgroup:/sys/fs/cgroup:rw
- ./certs:/var/www/onlyoffice/Data/certs
onlyoffice-elasticsearch:
image: onlyoffice/elasticsearch:7.16.3
container_name: onlyoffice-elasticsearch
restart: always
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g -Dlog4j2.formatMsgNoLookups=true"
- "indices.fielddata.cache.size=30%"
- "indices.memory.index_buffer_size=30%"
- "ingest.geoip.downloader.enabled=false"
networks:
- onlyoffice
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65535
hard: 65535
volumes:
- es_data:/usr/share/elasticsearch/data
expose:
- "9200"
- "9300"
onlyoffice-control-panel:
container_name: onlyoffice-control-panel
depends_on:
- onlyoffice-community-server
image: onlyoffice/controlpanel:3.5.2.530
environment:
- ONLYOFFICE_CORE_MACHINEKEY=core_secret
expose:
- '80'
- '443'
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- controlpanel_data:/var/www/onlyoffice/Data
- controlpanel_log:/var/log/onlyoffice
networks:
- onlyoffice
stdin_open: true
tty: true
onlyoffice-document-server:
image: onlyoffice/documentserver
container_name: onlyoffice-document-server
restart: always
ports:
- "8081:80"
environment:
- JWT_SECRET=MySuperSecretKey123456
- JWT_ENABLED=true
- DS_FONT_DELIVERY=false
volumes:
- ./document_data:/var/www/onlyoffice/Data
- ./document_logs:/var/log/onlyoffice
- ./document_fonts:/usr/share/fonts/truetype/custom
networks:
- onlyoffice
networks:
onlyoffice:
driver: 'bridge'
volumes:
community_data:
community_log:
community_letsencrypt:
controlpanel_data:
controlpanel_log:
mysql_data:
es_data:
在这个配置文件中,共配置了5个镜像:
-
onlyoffice-mysql-server
-
onlyoffice-community-server
-
onlyoffice-elasticsearch
-
onlyoffice-control-panel
-
onlyoffice-document-server
这5个镜像协同工作,才能使onlyoffice正常工作。
注意事项:
-
第29行,用户在配置时,需要将
- ONLYOFFICE_EXTERNAL_URL=http://192.168.1.9里面的IP改为宿主机的IP, 且不能是127.0.0.1, 否则无法上传、下载文件。 -
第112行,
- "8081:80"配置了宿主机和容器的两个端口之间的映射关系,第一个端口是宿主机的端口,用户可以自定义设置,不要与其他的应用冲突。 -
第46、47、48行,配置了 onlyoffice-community-server 镜像的三个监听端口,均由两个端口组成,前面的端口是宿主机的端口,可以改变, 后面的端口是容器里的端口,不可改变。
-
部署完成后,在浏览器通过第29行的IP与第46行的前面的port组合,访问 onlyoffice 应用。
4. 下载与部署镜像
防火墙放行端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 5222/tcp
sudo ufw allow 8081/tcp
进入 docker-compose.groups.yml 所在文件夹,执行以下命令:
# 开启容器
cd ~/onlyoffice-workspace
sudo docker-compose -f docker-compose.groups.yml up -d
# 等待 2 min ,通过以下命令查看容器是否启动成功
docker exec -it onlyoffice-mysql-server mysql -uroot -pmy-secret-pw onlyoffice
# 当命令执行完后,启动了 mysql 镜像,表示启动成功。
第一次执行以上命令时,docker会自动从镜像库下载拉取对应的镜像,等待时间比较长。当镜像已经下载好,后面再次执行时,docker会自动检测本地是否已经具备对应的镜像,如果具备,就不再重新下载,因此执行较快。

当onlyoffice安装不成功,想关闭容器重新配置容器时,可以执行以下命令
# 关闭容器
cd ~/onlyoffice-workspace
sudo docker-compose -f docker-compose.groups.yml down -v

5. 配置与应用 onlyoffice
打开浏览器,进入 "https://192.168.1.9:80/" (由 docker-compose.groups.yml 文件中第29行与第46行的IP与PORT组成),可以打开onlyoffice应用界面。

填入密码与注册邮箱,然后以注册的邮箱为用户名登录onlyoffice.
6. 保存镜像迁移部署
6.1 创建一个文件夹,存放离线包
mkdir -p ~/offline-onlyoffice
cd ~/offline-onlyoffice
docker save -o mysql_8.0.29.tar mysql:8.0.29
docker save -o communityserver_12.6.0.1900.tar onlyoffice/communityserver:12.6.0.1900
docker save -o elasticsearch_7.16.3.tar onlyoffice/elasticsearch:7.16.3
docker save -o controlpanel_3.5.2.530.tar onlyoffice/controlpanel:3.5.2.530
docker save -o documentserver_7.3.3.54.tar onlyoffice/documentserver
每个 tar 是一个镜像,单个文件较大,总大小大概 10-15G,预留足够 U 盘空间。
通过以下命令把大文件分割成两个包:
split -n 2 data.tar.gz data.tar.gz.part. # 分割
cat data.tar.gz.part.* > data.tar.gz # 合并
tar -zxvf data.tar.gz # 解压
导入镜像的命令是:
docker load -i mysql_8.0.29.tar
docker load -i communityserver_12.6.0.1900.tar
docker load -i elasticsearch_7.16.3.tar
docker load -i controlpanel_3.5.2.530.tar
docker load -i documentserver_7.3.3.54.tar
6.2 拷贝配套配置文件
把你原来部署目录下这些全部复制到 U 盘:
tar -zcvf onlyoffice-workspace.tar.gz ~/onlyoffice-workspace
解压命令是:
tar -zxvf onlyoffice-workspace.tar.gz