name: asterisk-ari services: asterisk1: image: andrius/asterisk:latest container_name: ast1 volumes: - ./conf/http.conf:/etc/asterisk/http.conf:ro - ./conf/ari.conf:/etc/asterisk/ari.conf:ro - ./conf/pjsip.conf:/etc/asterisk/pjsip.conf:ro - ./conf/rtp.conf:/etc/asterisk/rtp.conf:ro ports: ["8088:8088"] restart: unless-stopped networks: [astari] # 第二个 Asterisk 节点: 无共享状态, 出站外呼各自独立 (水平扩展验证) asterisk2: image: andrius/asterisk:latest container_name: ast2 volumes: - ./conf/http.conf:/etc/asterisk/http.conf:ro - ./conf/ari.conf:/etc/asterisk/ari.conf:ro - ./conf/pjsip.conf:/etc/asterisk/pjsip.conf:ro - ./conf/rtp.conf:/etc/asterisk/rtp.conf:ro ports: ["8089:8088"] restart: unless-stopped networks: [astari] profiles: [scale] # Mock SIP 运营商 (UAS): 应答 Asterisk 的出站 INVITE mock-provider: image: python:3.12-alpine container_name: ast-mock-provider working_dir: /app command: python mock/mock-provider.py volumes: - ./mock:/app/mock:ro environment: SIP_PORT: "5060" RTP_PORT: "40000" RING_DELAY: "1.5" restart: unless-stopped networks: [astari] networks: astari: driver: bridge