[comment]: # ({fdf81d16-e1f5ce3f})
# 从容器升级

[comment]: # ({/fdf81d16-e1f5ce3f})

[comment]: # ({b238bbd2-236aea13})
### 概述

本节介绍成功将 [upgrade](/manual/installation/upgrade) 到 Zabbix **8.0**.x 容器所需的步骤。

可分别参考以下说明：

-   [Zabbix 组件镜像升级](#zabbix-component-image-upgrade)
-   [Docker Compose 文件升级](#docker-compose-file-upgrade)

::: notewarning
升级前，请务必阅读相关的 [**升级说明**](/manual/installation/upgrade)！
:::

::: noteimportant
开始升级前，请确认用户对数据库具有升级所需的必要权限。
<br><br>
对于从 Zabbix 6.0 或更早版本升级的情况，在升级过程中需要创建确定性触发器。
如果 MySQL/MariaDB 启用了二进制日志记录，则这需要超级用户权限，或设置变量/配置参数 `log_bin_trust_function_creators = 1`。
有关如何设置该变量的说明，请参见 [数据库创建脚本](/manual/appendix/install/db_scripts#mysqlmariadb)。
<br><br>
请注意，如果从控制台执行，该变量只会被临时设置，并会在 Docker 重启后失效。
在这种情况下，请保持 SQL 服务运行，仅通过执行 `docker compose down zabbix-server` 停止 `zabbix-server` 服务，然后执行 `docker compose up -d zabbix-server`。
<br><br>
或者，也可以在配置文件中设置该变量。
:::

根据数据库大小不同，升级数据库到 8.0 版本可能需要较长时间。

[comment]: # ({/b238bbd2-236aea13})

[comment]: # ({63138e73-27011b38})
### Zabbix 组件镜像升级

这些说明将升级用作 Zabbix 组件容器基础的 Docker 镜像。

以下步骤以 Zabbix proxy 为例。
请将 `zabbix-proxy-sqlite3` 替换为您的组件容器名称。

1\. 检查所有容器，以识别其名称和当前镜像版本：

```bash
docker ps -a

# CONTAINER ID   IMAGE                                           (...) NAMES
# 5a0c2e3d02b4   zabbix/zabbix-proxy-sqlite3:alpine-7.4-latest   (...) zabbix-proxy-sqlite3
```

2\. 拉取新版本镜像：

```bash
docker pull zabbix/zabbix-proxy-sqlite3:alpine-8.0-latest
```

3\. 停止 Zabbix 组件容器：

```bash
docker stop zabbix-proxy-sqlite3
```

4\. 删除 Zabbix 组件容器：

::: noteimportant
继续之前，请确保您已记录原始 `docker run` 命令中使用的所有配置标志和卷挂载，因为重新创建容器时将需要它们。
:::

```bash
docker rm zabbix-proxy-sqlite3
```

5\. 使用更新后的镜像启动一个新容器：

```bash
docker run --name zabbix-proxy-sqlite3 \
  -e ZBX_SERVER_HOST=192.0.2.0 \
  -e ZBX_PROXYMODE=0 \
  -e ZBX_HOSTNAME=zabbix-proxy-sqlite3 \
  -v zabbix-proxy-data:/var/lib/zabbix/db_data \
  --init \
  -d \
  zabbix/zabbix-proxy-sqlite3:alpine-8.0-latest
```

::: noteclassic
有关运行 Zabbix 容器的更多信息，请参见 [Docker（手动部署）](/manual/installation/install/containers#docker-manual-deployment)。
:::

6\. 通过检查容器日志来验证升级是否成功：

```bash
docker logs -f zabbix-proxy-sqlite3
```

[comment]: # ({/63138e73-27011b38})

[comment]: # ({408f59dc-d707ad1d})
### Docker Compose 文件升级

这些说明用于升级部署 Zabbix 组件所使用的 Docker Compose 文件。
如果您是使用 [Docker Compose](/manual/installation/install/containers#docker-compose) 安装 Zabbix 的，请按照这些说明操作。

1\. 检查所有容器，以识别其名称和当前镜像版本：

```bash
docker ps -a

# CONTAINER ID   IMAGE                                             (...) NAMES
# d095f486deef   zabbix/zabbix-server-mysql:alpine-7.4-latest      (...) zabbix-docker-zabbix-server-1
# 70627d833da0   zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest   (...) zabbix-docker-zabbix-web-nginx-mysql-1
# aaaa664cc185   zabbix/zabbix-server-mysql:alpine-7.4-latest      (...) zabbix-docker-server-db-init-1
# 9ab3e77492ff   mysql:8.0-oracle                                  (...) zabbix-docker-mysql-server-1
```

2\. 进入您之前克隆的 Zabbix Docker 仓库，拉取最新更新，并切换到 8.0 分支：

::: noteimportant
如果您修改过本地仓库中的 `.env`、`compose.yaml` 或其他文件，`git pull` 可能会覆盖这些文件。
在运行此步骤之前，请先备份所有本地更改。
:::

```bash
cd zabbix-docker
git pull
git checkout 8.0
```

3\. 使用更新后的 Docker Compose 文件部署 Zabbix 组件：

```bash
# 使用 MySQL 作为数据库：
docker compose -f ./compose.yaml up -d

# 使用 PostgreSQL 作为数据库：
docker compose -f ./compose_pgsql.yaml up -d
```

::: noteclassic
在所有容器重新创建并启动后，数据采集恢复之前可能需要 1—3 分钟。
有关运行 Zabbix 容器的更多信息，请参见 [Docker Compose](/manual/installation/install/containers#docker-compose)。
:::

4\. 通过检查容器日志来验证升级是否成功（将 `zabbix-docker-zabbix-server-1` 替换为您的组件容器名称）：

```bash
docker logs -f zabbix-docker-zabbix-server-1
```

[comment]: # ({/408f59dc-d707ad1d})
