环境部署1: Open5GS
在网络上找到的有关 Dockerized Open5GS 的部署经验帖:
| 名称 |
地位 |
链接 |
| herlesupreeth/docker_open5gs |
最完整的Docker部署方案,官方推荐 |
https://github.com/herlesupreeth/docker_open5gs |
| Open5GS官方VoLTE Docker教程 |
官方文档中引用的Docker方案 |
https://open5gs.org/open5gs/docs/tutorial/03-VoLTE-dockerized/ |
| Nick vs Networking博客 |
经典的Open5GS+UERANSIM入门教程 |
https://nickvsnetworking.com/my-first-5g-core-open5gs-and-ueransim/ |
| Medium: 5G Core Network Setup |
eranga的详细部署经验 |
https://medium.com/rahasak/5g-core-network-setup-with-open5gs-and-ueransim-cd0e77025fd7 |
| Gradiant 5G Charts |
Kubernetes/Helm部署参考 |
https://gradiant.github.io/5g-charts/open5gs-ueransim-gnb.html |
下面给出笔者自己的步骤:
环境: Ubuntu 24.04, 采用本机部署 Open5GS Docker, 不考虑虚拟机
系统环境准备
系统版本确认:
| Bash |
|---|
| # 确认Ubuntu版本 (22.04/24.04...)
lsb_release -a
|
Docker 和 Docker Compose 安装:
| Bash |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | # 安装Docker
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证安装
docker --version # 需要 >= 22.0.5
docker compose version # 需要 >= 2.14
|
配置docker权限: [懒人族. 不想每次都显式输入 sudo]
| Bash |
|---|
| sudo usermod -aG docker $USER
newgrp docker
|
拉取/构建/配置
本地仓库:
| Bash |
|---|
| git clone https://github.com/herlesupreeth/docker_open5gs d2c-open5gs
cd d2c-open5gs
|
拉取预构建镜像: [推荐. 节省时间]
| Bash |
|---|
| # 拉取基础镜像
docker pull ghcr.io/herlesupreeth/docker_open5gs:master
# 含义是: alias (用 docker images 检查, 发现二者UUID相同)
docker tag ghcr.io/herlesupreeth/docker_open5gs:master docker_open5gs
|
编辑 .env 文件并修改:
| Bash |
|---|
| cd ~/d2c-open5gs
vim .env
|
| YAML |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13 | # PLMN配置(测试用001/01即可)
MCC=001
MNC=01
# 重要: 改为你的主机IP地址
DOCKER_HOST_IP=192.168.1.100 # ← 改成你的实际IP
# UE IP地址池(确保不与现有网络冲突)
UE_IPV4_INTERNET=10.45.0.0/16
UE_IPV4_IMS=10.46.0.0/16
# 5G SA部署需要的参数
UPF_ADVERTISE_IP=192.168.1.100 # ← 通常与DOCKER_HOST_IP相同
|
系统设置
网络:
| Bash |
|---|
| # 关闭防火墙
sudo ufw disable
# 启用IP转发
sudo sysctl -w net.ipv4.ip_forward=1
# 持久化IP转发配置
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
|
环境变量:
| Bash |
|---|
| cd ~/d2c-open5gs
set -a
source .env
set +a
|
启动 5GC
| Bash |
|---|
| # 启动所有5GC网络功能
docker compose -f sa-deploy.yaml up -d
# 查看运行状态
docker compose -f sa-deploy.yaml ps
|



| Bash |
|---|
| # 全盘检查
# - mongodb
# - webui
# - nrf, scp, ausf, udm, udr, pcf, bsf, nssf
# - amf, smf, upf
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|

检查: 访问WebUI
打开浏览器访问: http://<DOCKER_HOST_IP>:9999, 其实也就是 localhost:9999
登录凭据:

后续
现在我们已经完成了初始化配置+第一次启动:
- 该怎么关闭呢?
- 下一次如何再启动呢?
关闭
| Bash |
|---|
| cd ~/d2c-open5gs
# 方式A: 停止但保留容器 [推荐日常使用]
docker compose -f sa-deploy.yaml stop
# 方式B: 停止并删除容器
docker compose -f sa-deploy.yaml down
# 方式C: 停止并删除容器+数据卷 [完全重置. 慎用]
docker compose -f sa-deploy.yaml down -v
|
开启
| Bash |
|---|
| cd ~/d2c-open5gs
# 如果之前用 stop 关闭的
docker compose -f sa-deploy.yaml start
# 如果之前用 down 关闭的 [or 首次启动, 正如上面我们配置环境时]
docker compose -f sa-deploy.yaml up -d
|
推荐工作流
鉴于我们现在已经配置完所有环节, 后面就是日常的"开启/关闭"即可, 因此笔者推荐的工作流是:
| Bash |
|---|
| # 上班:
docker compose -f sa-deploy.yaml start
# 下班:
docker compose -f sa-deploy.yaml stop
|
指令说明
指令说明 [暂时用不上, 担心后面有需要, 先整理着]
- 修改配置文件:
restart
- 修改
docker-compose.yaml / .env: down + up -d
- 修改
Dockerfile: down + build + up -d
- 修改 Open5GS 源码:
down + build --no-cache + up -d
用 AI 总结了一下, 感觉整理的比笔者好:
| Bash |
|---|
1
2
3
4
5
6
7
8
9
10
11
12 | docker_open5gs/
├── .env # 环境变量 → down + up
├── sa-deploy.yaml # 部署定义 → down + up
├── base/
│ └── Dockerfile # 基础镜像构建 → build --no-cache
├── amf/
│ └── amf.yaml # AMF配置 → restart amf
├── smf/
│ └── smf.yaml # SMF配置 → restart smf
├── upf/
│ └── upf.yaml # UPF配置 → restart upf
└── ...
|