本文档介绍如何使用Docker在AMD64平台上部署RTSP视频流管理系统。
# 1. 构建并启动服务
docker-compose up -d
# 2. 查看日志
docker-compose logs -f
# 3. 停止服务
docker-compose down
# 4. 停止并删除数据卷
docker-compose down -v
# 1. 构建镜像
docker build --platform linux/amd64 -t jtjai_media:latest .
# 2. 运行容器
docker run -d \
--name jtjai_media \
--platform linux/amd64 \
-p 8080:8080 \
-v $(pwd)/output:/app/output \
-v $(pwd)/config.json:/app/config.json:ro \
jtjai_media:latest
# 3. 查看日志
docker logs -f jtjai_media
# 4. 停止容器
docker stop jtjai_media
# 5. 删除容器
docker rm jtjai_media
Dockerfile使用多阶段构建来优化镜像大小:
构建阶段(builder)
运行阶段
镜像明确指定为 linux/amd64 平台,确保在AMD64架构上运行。
有两种方式修改配置:
# 1. 修改宿主机的config.json
vim config.json
# 2. 重启容器使配置生效
docker-compose restart
# 或
docker restart jtjai_media
# 1. 进入容器
docker exec -it jtjai_media bash
# 2. 修改配置
vi /app/config.json
# 3. 退出容器并重启
exit
docker restart jtjai_media
{
"global_config": {
"total_poll_duration_seconds": 60,
"max_concurrent_streams": 2,
"output_directory": "./output",
"poll_cycles": 3
},
"streams": [
{
"rtsp_url": "rtsp://your-rtsp-url",
"duration_seconds": 15,
"weight": 1.0,
"output_filename": "stream1.mp4"
}
]
}
视频文件默认保存在容器的 /app/output
目录,建议挂载到宿主机:
volumes:
- ./output:/app/output
这样即使容器删除,视频文件也会保留在宿主机的 ./output
目录中。
output/
├── 20251011_082130/
│ ├── test_stream1.mp4
│ ├── test_stream2.mp4
│ ├── rtsp_report.json
│ ├── report.txt
│ └── streams.csv
├── 20251011_082230/
│ └── ...
└── ...
容器启动后,可以通过以下地址访问:
默认映射 8080:8080
,如需修改宿主机端口:
ports:
- "9090:8080" # 宿主机9090端口映射到容器8080
# Docker Compose
docker-compose logs -f
# Docker
docker logs -f jtjai_media
# 只看最近100行
docker logs --tail 100 jtjai_media
# 进入bash
docker exec -it jtjai_media bash
# 查看进程
docker exec jtjai_media ps aux
# 查看输出文件
docker exec jtjai_media ls -lh /app/output
容器配置了健康检查,可以查看状态:
# 查看健康状态
docker inspect --format='{{.State.Health.Status}}' jtjai_media
# 查看健康检查日志
docker inspect --format='{{range .State.Health.Log}}{{.Output}}{{end}}' jtjai_media
在 docker-compose.yml
中调整:
deploy:
resources:
limits:
cpus: '4.0' # 最多使用4个CPU核心
memory: 4G # 最多使用4GB内存
reservations:
cpus: '2.0' # 预留2个CPU核心
memory: 1G # 预留1GB内存
environment:
- TZ=Asia/Shanghai # 时区
- LOG_LEVEL=DEBUG # 日志级别(需要代码支持)
networks:
rtsp_network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
运行多个实例(不同端口):
# 实例1
docker run -d --name jtjai_media_1 -p 8081:8080 jtjai_media:latest
# 实例2
docker run -d --name jtjai_media_2 -p 8082:8080 jtjai_media:latest
# 1. 查看详细日志
docker logs jtjai_media
# 2. 检查配置文件
docker run --rm -v $(pwd)/config.json:/config.json ubuntu:22.04 cat /config.json
# 3. 检查端口占用
netstat -tuln | grep 8080
# 1. 检查目录权限
ls -la output/
# 2. 进入容器检查
docker exec -it jtjai_media bash
cd /app/output
ls -la
# 3. 检查磁盘空间
df -h
# 1. 确认容器运行
docker ps | grep jtjai_media
# 2. 测试端口
curl http://localhost:8080/
# 3. 检查防火墙
sudo ufw status
# 使用构建缓存
docker build --cache-from jtjai_media:latest -t jtjai_media:latest .
# 并行构建
docker build --build-arg MAKEFLAGS="-j$(nproc)" .
# 在docker-compose.yml中
services:
jtjai_media:
# 使用主机网络模式(更好的性能,但失去网络隔离)
network_mode: "host"
# 共享内存大小
shm_size: '2gb'
只读挂载配置文件
volumes:
- ./config.json:/app/config.json:ro
限制容器权限
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
使用非root用户(需要修改Dockerfile)
RUN useradd -m -u 1000 appuser
USER appuser
version: '3.8'
services:
jtjai_media:
build:
context: .
dockerfile: Dockerfile
platforms:
- linux/amd64
image: jtjai_media:latest
container_name: jtjai_media_prod
restart: always
ports:
- "8080:8080"
volumes:
- ./config.json:/app/config.json:ro
- ./output:/app/output
- /etc/localtime:/etc/localtime:ro
environment:
- TZ=Asia/Shanghai
deploy:
resources:
limits:
cpus: '4.0'
memory: 4G
reservations:
cpus: '2.0'
memory: 1G
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
- rtsp_network
networks:
rtsp_network:
driver: bridge
# 构建
docker-compose build
docker-compose build --no-cache # 不使用缓存
# 启动
docker-compose up -d
docker-compose up -d --force-recreate # 强制重建容器
# 停止
docker-compose stop
docker-compose down
# 日志
docker-compose logs -f
docker-compose logs -f --tail=100
# 重启
docker-compose restart
# 清理
docker-compose down -v # 删除容器和卷
docker system prune -a # 清理所有未使用的Docker对象
如遇到问题,请检查:
最后更新: 2025-10-11 Docker版本: 20.10+ 平台: linux/amd64