mirror of
https://github.com/Borjis131/docker-open5gs.git
synced 2025-11-02 21:03:14 +00:00
README.md and docs/:
- Project README.md - docs/ with FAQS and configuration explained
This commit is contained in:
72
README.md
Normal file
72
README.md
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
# Open5GS 5G Core in Docker
|
||||||
|
|
||||||
|
Open5GS 5G Core Network Functions images ready for Docker.
|
||||||
|
|
||||||
|
This repository contains the Dockerfiles and docker compose files used to deploy a configurable 5G Core.
|
||||||
|
|
||||||
|
## Use it
|
||||||
|
|
||||||
|
All the images depend on the base image. So first, update the `.env` file with the desired values to use:
|
||||||
|
|
||||||
|
`OPEN5GS_VERSION` is the version of Open5GS to use.
|
||||||
|
- Accepted values are the tags, branches or commit IDs used in the Open5GS project
|
||||||
|
- Default value: v2.5.6
|
||||||
|
- Tested values: v2.5.5, v2.5.6
|
||||||
|
|
||||||
|
`UBUNTU_VERSION` is the version of the ubuntu Docker image used as base for the containers.
|
||||||
|
- Accepted values are the tags used by Ubuntu in Docker Hub
|
||||||
|
- Default value: focal
|
||||||
|
- Tested values: focal
|
||||||
|
|
||||||
|
`MONGODB_VERSION` is the version of the mongo Docker image used as database for Open5GS.
|
||||||
|
- Accepted values are the tags used by MongoDB in Docker Hub
|
||||||
|
- Default value: The one specified in the `.env` file
|
||||||
|
- Tested values: 3.6.8, 4.2
|
||||||
|
|
||||||
|
`DOCKER_HOST_IP` is the IP address of the host running Docker. This modifies the `advertise` field in the `upf.yaml` config file for this to work when exposing the Docker containers network.
|
||||||
|
|
||||||
|
## Build it
|
||||||
|
|
||||||
|
To create the base image run:
|
||||||
|
```bash
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
This will take a while, after this you will have the base image, tagged with the `OPEN5GS_VERSION` selected.
|
||||||
|
|
||||||
|
After this you can run the following to create the Network Functions images:
|
||||||
|
```bash
|
||||||
|
# Example using the basic deployment with docker compose (v2)
|
||||||
|
docker compose -f compose-files/basic-v3/docker-compose.yaml --env-file=.env up -d
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
# Example using the basic deployment with docker-compose (v1)
|
||||||
|
docker-compose -f compose-files/basic-v2/docker-compose.yaml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## Use it
|
||||||
|
```bash
|
||||||
|
# Run the basic deployment with docker compose (v2)
|
||||||
|
docker compose -f compose-files/basic-v3/docker-compose.yaml --env-file=.env up -d
|
||||||
|
|
||||||
|
# Tear down the basic deployment with docker compose (v2)
|
||||||
|
docker compose -f compose-files/basic-v3/docker-compose.yaml --env-file=.env down
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
# Run the basic deployment with docker-compose (v1)
|
||||||
|
docker-compose -f compose-files/basic-v2/docker-compose.yaml up -d
|
||||||
|
|
||||||
|
# Tear down the basic deployment with docker-compose (v1)
|
||||||
|
docker-compose -f compose-files/basic-v2/docker-compose.yaml down
|
||||||
|
```
|
||||||
|
|
||||||
|
### Repository contents
|
||||||
|
|
||||||
|
- `compose-files/` directory contains different docker compose deployments.
|
||||||
|
- `configs/` directory contains the Open5GS configuration files for each docker compose deployment.
|
||||||
|
- `docs/` directory contains the documentation for this project.
|
||||||
|
- `images/` directory has each Network Function Dockerfile.
|
||||||
|
|
||||||
|
Check `docs/` to see the documentation.
|
||||||
36
docs/FAQ.md
Normal file
36
docs/FAQ.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Frequently Asked Questions
|
||||||
|
|
||||||
|
## Docker compose volume warning
|
||||||
|
|
||||||
|
It is normal to see:
|
||||||
|
```bash
|
||||||
|
WARN[0297]
|
||||||
|
volume "open5gs_db_data" already exists but was not created for project "<deployment_name>".
|
||||||
|
volume "open5gs_db_config" already exists but was not created for project "<deployment_name>".
|
||||||
|
```
|
||||||
|
|
||||||
|
It is only a warning, telling you that the Docker volume exists.
|
||||||
|
|
||||||
|
## No connectivity to an external network
|
||||||
|
|
||||||
|
Run in the host:
|
||||||
|
```bash
|
||||||
|
sudo sysctl -w net.ipv4.conf.all.forwarding=1
|
||||||
|
|
||||||
|
sudo iptables -P FORWARD ACCEPT
|
||||||
|
|
||||||
|
# Extracted from:
|
||||||
|
# enable forwarding from Docker containers to the outside world
|
||||||
|
# https://docs.docker.com/network/bridge/#enable-forwarding-from-docker-containers-to-the-outside-world
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environment variables not expanding
|
||||||
|
|
||||||
|
If you are seeing an error related to the environment variables in Docker compose not expanding, check where the `.env` file is located. To avoid errors, it is easier to specify the path using the `--env-file` command option (even though, if you are using v1 format with `docker-compose`, it is not needed).
|
||||||
|
```bash
|
||||||
|
# Example using the basic deployment with docker compose (v2)
|
||||||
|
docker compose -f compose-files/basic/docker-compose.yaml --env-file=.env up -d
|
||||||
|
|
||||||
|
# Example using the basic deployment with docker-compose (v1)
|
||||||
|
docker-compose -f compose-files/basic/docker-compose.yaml --env-file=.env up -d
|
||||||
|
```
|
||||||
80
docs/configuration.md
Normal file
80
docs/configuration.md
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
# Configuration guide
|
||||||
|
|
||||||
|
## Common configuration
|
||||||
|
|
||||||
|
### Network configuration
|
||||||
|
|
||||||
|
All the services are connected using a network called `open5gs` using the bridge driver and IPv4 addresses in the range 10.33.33.0/24. This network is destroyed with the Docker compose down command.
|
||||||
|
|
||||||
|
The `basic/` Docker compose deployment exposes three things:
|
||||||
|
- SCTP port 38412 for NGAP connections to the AMF
|
||||||
|
- UDP port 2152 for GTP connections to the UPF
|
||||||
|
- TCP port 27017 for connections to the mongo database
|
||||||
|
|
||||||
|
These ports are available in the loopback network of the host running Docker and the host itself exposes these ports for external connections.
|
||||||
|
|
||||||
|
### Database configuration
|
||||||
|
|
||||||
|
After building, the 5G Core will start without any user configured in the Open5GS mongo database.
|
||||||
|
|
||||||
|
The information for the database is kept in Docker volumes named `open5gs_db_config` and `open5gs_db_data`, this way the information added to the database is persistent between restarts.
|
||||||
|
|
||||||
|
You can use the Open5GS `open5gs-dbctl` script in the host to add users to the database.
|
||||||
|
|
||||||
|
The database Docker volumes are marked with a label `org.open5gs.mongodb_version` indicating the `MONGODB_VERSION` selected in the `.env` file. This marks the version used for the mongo container. This label is needed to debug issues with users changing the mongo container version but keeping the Docker volumes created.
|
||||||
|
|
||||||
|
> When upgrading/downgrading the `MONGODB_VERSION` the existing `open5gs_db_config` and `open5gs_db_data` Docker volumes could cause problems/crashing. It is recommended to remove them.
|
||||||
|
|
||||||
|
### Network Function configuration
|
||||||
|
|
||||||
|
You can override the command being run in the container by using the command section in each service specified in the Docker compose file:
|
||||||
|
```yaml
|
||||||
|
nssf:
|
||||||
|
...
|
||||||
|
command: "-c /open5gs/config/nssf.yaml"
|
||||||
|
```
|
||||||
|
|
||||||
|
## The `basic` Docker compose deployment
|
||||||
|
|
||||||
|
The `configs/basic/` configuration uses Open5GS 5G Network Functions without SCP.
|
||||||
|
|
||||||
|
The `configs/basic/upf.yaml` UPF config file is using the _advertise_ option with the `DOCKER_HOST_IP` environment variable present in the `.env` file (it is used through the `docker-host.external-ip` hosts entry). This configures the 5G Core to expect connections from external networks (not the docker network), through the host machine.
|
||||||
|
|
||||||
|
The files for the `basic` deployment `compose-files/basic-v2/` and `compose-files/basic-v3/` contains the docker-compose.yaml files to work with docker compose version 2 and version 3 features.
|
||||||
|
|
||||||
|
The Network Functions configuration files are mounted using different methods in `compose-files/basic-v2/` and `compose-files/basic-v3/` but the outcome is the same.
|
||||||
|
|
||||||
|
`compose-files/basic-v2/` method uses volumes while `compose-files/basic-v3/` method uses configs. In both, the source config file present in `configs/basic/<nf>.yaml` is mounted into the container path `/open5gs/config/<nf>.yaml`. This way you can try different configuration files without the need of rebuilding the Docker image.
|
||||||
|
|
||||||
|
## Specific Network Function configuration
|
||||||
|
|
||||||
|
### AMF configuration
|
||||||
|
|
||||||
|
AMF container lets you choose if you want to enable/disable checksum offloading. Checksum offloading is enabled by default but can be disabled by setting the environment variable `DISABLE_CHECKSUM_OFFLOADING` to TRUE in the Docker compose AMF service:
|
||||||
|
```yaml
|
||||||
|
amf:
|
||||||
|
...
|
||||||
|
environment:
|
||||||
|
- DISABLE_CHECKSUM_OFFLOADING=TRUE
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
### UPF configuration
|
||||||
|
|
||||||
|
UPF container lets you enable/disable NAT in the UPF. NAT in the UPF is enabled by default but can be disabled by setting the environment variable `DISABLE_NAT` to TRUE in the Docker compose UPF service:
|
||||||
|
```yaml
|
||||||
|
upf:
|
||||||
|
...
|
||||||
|
environment:
|
||||||
|
- DISABLE_NAT=TRUE
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
UPF container reads the subnets specified in the Open5GS config file and setups the network interfaces needed with the addresses specified and the NAT (or not) configuration:
|
||||||
|
```yaml
|
||||||
|
upf:
|
||||||
|
...
|
||||||
|
subnet:
|
||||||
|
- addr: 10.45.0.1/16
|
||||||
|
...
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user