🙈 By 刘琪 2024-03-13
NJet Docker镜像介绍与运行
镜像简介
镜像内NJet文件说明
NJet镜像中NJet安装目录为/usr/local/njet/,如下图所示:

| Njet镜像文件介绍 | |||
|---|---|---|---|
| 文件名(相对于/usr/local/njet/) | 描述 | 备注 | |
| conf | NJet启动需要的配置 | ||
| data | NJet运行时产生的数据 | docker run 时,可以挂载宿主机文件到容器内,便于配置、日志、数据持久化到宿主机 | |
| logs | NJet运行时产生的日志 | ||
| modules | NJet动态模块 | 实现NJet特性 | |
| lualib | NJet依赖的lua | ||
| sbin | NJet二进制可执行程序 |
镜像参数说明
label信息
| label名 | 含义 | 示例 | 备注 |
| njet.org.cn.image.build.target | 构建镜像的主机系统架构 | linux/amd64 | |
| njet.org.cn.image.build.os | 基础镜像镜像 | ubuntu | |
| njet.org.cn.image.njet.revision | NJet commit id | 44661bb6fae0ecee4d1c28dee53a3f06582a7e05 | |
| njet.org.cn.image.njet.version | NJet版本,即TAG | latest | 构建时人为指定的,可能与njet -V不一致 |

镜像内NJet二进制也可以查看源码commit id

运行NJet容器
容器启动后,NJet默认监听的端口如下表所述:
| 端口 | 描述 | |
| 8080 | NJet数据面端口,实现业务请求处理 | |
| 8081 | NJet控制面端口,实现NJet动态API处理 |
最小特权
出于安全考虑,在运行NJet容器时,我们推荐使用最小特权启动容器。容器具有指定的能力。 执行如下命令启动NJet。
docker run -d --rm --cap-drop=ALL --cap-add=cap_dac_override --cap-add=cap_dac_read_search --cap-add=cap_setuid --cap-add=cap_net_bind_service --cap-add=cap_net_admin --cap-add=cap_net_raw --cap-add=cap_setgid --cap-add=cap_audit_write tmlake/njet:latest
–cap-add=cap_setgid 与–cap-add=cap_audit_write 是为了有权限使用sudo,比如sudo iptables -t nat -S
挂载宿主机文件,执行如下命令启动NJet。
docker run -v /root/liuqi/njet/njet.conf:/usr/local/njet/conf/njet.conf -v /root/liuqi/njet/njet_ctrl.conf:/usr/local/njet/conf/njet_ctrl.conf -v /root/liuqi/njet/logs:/usr/local/njet/logs -v /root/liuqi/njet/data:/usr/local/njet/data -d --rm --cap-drop=ALL --cap-add=cap_dac_override --cap-add=cap_dac_read_search --cap-add=cap_setuid --cap-add=cap_net_bind_service --cap-add=cap_net_admin --cap-add=cap_net_raw --cap-add=cap_setgid --cap-add=cap_audit_write tmlake/njet:latest
根据自己host目录修改。
-v 宿主机(使用绝对路径,相对路径低版本docker不支持):容器,挂载宿主机文件到容器内
-p 宿主机:容器,将容器端口暴露到宿主机
所有特权
也可以使用privileged启动容器,容器继承内核所有的能力。 执行如下命令启动NJet。
docker run -d --rm --privileged tmlake/njet:latest
测试案例
Docker版本

最小特权运行
使用镜像内配置启动
执行docker run启动NJet容器,成功运行后屏幕会输出容器id

登录容器内,查看NJet运行情况
//登录容器
docker exec -it d7aad0334008 /bin/bash

请求测试 容器中执行如下指令
curl http://127.0.0.1:8080/

使用宿主机配置启动
执行如下指令启动


根据自己host目录修改。
-v 宿主机(使用绝对路径,相对路径地版本docker不支持):容器,挂在宿主机文件到容器内
-p 宿主机:容器,>将容器端口暴露到宿主机
登录容器内,查看NJet运行情况
//登录容器
docker exec -it b2b6134b22e2 /bin/bash



请求测试 在宿主机访问/lua
curl http://192.168.40.209:8080/lua

range测试
curl http://192.168.40.209:8081/config/2/config/range | jq

添加range规则
{
"action": "add",
"type": "tcp",
"src_ports": "11000:13000",
"dst_port": 10001
}
curl -X PUT http://192.168.40.209:8081/config/2/config/range -d @range.json

登录容器内查看规则
docker exec -it b2b6134b22e2 /bin/bash
sudo iptables -t nat -S
