环境部署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 |
|---|
| # PLMN配置(测试用001/01即可)
MCC=001
MNC=01
# 重要: 改为你的主机IP地址
DOCKER_HOST_IP=192.168.1.100 # ← 改成你的实际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 |
|---|
| # 构建所有组件
docker compose -f sa-deploy.yaml build
# 启动所有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
└── ...
|
复盘: 结合open5gs环境部署, 讲解 docker 常见工作流

(1) 构建镜像
既可以利用本地的github仓库自行构建, 也可以直接pull远程的"别人构建好的镜像"
| Bash |
|---|
| # Method 1: pull远程镜像
# [GitHub镜像仓库 ghio/...] -> PC -> [本地镜像库 d2c-open5gs]
docker pull ghcr.io/herlesupreeth/docker_open5gs:master # pull from remote
docker tag ghcr.io/herlesupreeth/docker_open5gs:master d2c-open5gs # alias
|
| Bash |
|---|
| # Method 2: build本地镜像
# [Dockerfile (构建脚本)] -> [Docker引擎执行每一条构建指令] -> [本地镜像库 d2c-open5gs]
cd ~/d2c-open5gs/base
docker build --no-cache --force-rm -t d2c-open5gs .
|
检查本地镜像:
(2) docker-compose.yaml 多容器部署交互模式定义
比如这里的 sa-deploy.yaml, 定义了:
| YAML |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 | services:
mongodb: # 数据库服务
image: mongo # 使用官方MongoDB镜像
ports: ["27017:27017"]
nrf: # NRF网络功能
image: docker_open5gs # 使用我们的镜像
command: /open5gs/install/bin/open5gs-nrfd # 启动NRF程序
depends_on: [mongodb] # 依赖MongoDB先启动
amf: # AMF网络功能
image: docker_open5gs
command: /open5gs/install/bin/open5gs-amfd
depends_on: [nrf] # 依赖NRF先启动
ports: ["38412:38412/sctp"] # 暴露NGAP端口
smf: # SMF网络功能
image: docker_open5gs
...
upf: # UPF网络功能
image: docker_open5gs
privileged: true # 需要特权模式(创建TUN设备)
...
networks:
default: # 定义Docker内部网络
driver: bridge
ipam:
config:
- subnet: 172.22.0.0/24
|

(3) 构建额外组件
| Bash |
|---|
| docker compose -f sa-deploy.yaml build
|
Docker Compose 读取 sa-deploy.yaml, 按照里面的定义, 对每一个需要构建的服务:
- 找到对应的 Dockerfile
- 执行 docker build, 生成该服务专用的images
(4) 启动所有容器
| Bash |
|---|
| docker compose -f sa-deploy.yaml up -d
|
- 创建Docker网络
- 按依赖顺序启动容器