You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Docker、Docker Compose部署Freqtrade+Binance-Proxy并解决网络互通问题

问题描述

背景

  • 正在学习Docker网络相关知识,目前遇到Freqtrade与Binance-Proxy两个服务无法正常通信的问题
  • 为两个服务分别创建了容器,proxy配置了静态IP,各Docker网络网关信息如下:
root@DESKTOP-74LHUDF:/mnt/e/Python/freqtrade-docker# docker network inspect bot_1 | grep '"Gateway"' | head -n 1
                    "Gateway": "172.23.0.1"
root@DESKTOP-74LHUDF:/mnt/e/Python/freqtrade-docker# docker network inspect bot_2 | grep '"Gateway"' | head -n 1
                    "Gateway": "172.24.0.1"
root@DESKTOP-74LHUDF:/mnt/e/Python/freqtrade-docker# docker network inspect bot_3 | grep '"Gateway"' | head -n 1
                    "Gateway": "172.25.0.1"
root@DESKTOP-74LHUDF:/mnt/e/Python/freqtrade-docker# docker network inspect bot_4 | grep '"Gateway"' | head -n 1
                    "Gateway": "172.26.0.1"
root@DESKTOP-74LHUDF:/mnt/e/Python/freqtrade-docker# docker network inspect bot_5 | grep '"Gateway"' | head -n 1
                    "Gateway": "172.27.0.1"
root@DESKTOP-74LHUDF:/mnt/e/Python/freqtrade-docker# docker network inspect bot_6 | grep '"Gateway"' | head -n 1
                    "Gateway": "172.28.0.1"
root@DESKTOP-74LHUDF:/mnt/e/Python/freqtrade-docker# docker network inspect bot_7 | grep '"Gateway"' | head -n 1
                    "Gateway": "172.29.0.1"
root@DESKTOP-74LHUDF:/mnt/e/Python/freqtrade-docker# docker network inspect bot_8 | grep '"Gateway"' | head -n 1
                    "Gateway": "172.30.0.1"

Proxy的IP为172.x.0.2,Freqtrade的IP暂时无法确定。

已排查现象

  • 执行docker exec -it <container_name> ping google.com可以确认容器能正常访问公网,也能ping通binance-proxy容器,但不管是宿主机还是Freqtrade容器都无法httping通代理服务。
  • 已使用docker inspect、docker network inspect命令排查,也通过docker exec -it ... /bin/bash进入容器查看ifconfig和iptables配置,均无异常,ping通信完全正常。
  • 仅有第一个机器人可以正常运行,其余配置相同的机器人无法启动,对比正常、异常的proxy和Freqtrade容器配置无差异。
  • 将ccxt的json配置中的地址改为网关IP(格式为172.x.0.1:809x/api/v3)时,不会出现连接报错,但第二个机器人修改成同样配置后会报('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))错误。

相关配置

服务启动脚本

#!/bin/bash

cd /mnt/e/Python/freqtrade-docker/bot_2
docker run -w="/mnt/e/Python/freqtrade-docker/bot_2" -d --name proxy_2 --net bot_2 -p 8092:8092 nightshift2k/binance-proxy:latest
docker-compose up -d

docker-compose.yml配置

---
version: '3'
services:
  freqtrade:
    image: freqtradeorg/freqtrade:stable
    restart: unless-stopped
    container_name: freqtrade_2
    volumes:
      - "./user_data:/freqtrade/user_data"
    ports:
      - "127.0.0.1:8082:8082"
    networks:
          - default
    command: >
      trade
      --logfile /freqtrade/user_data/logs/freqtrade.log
      --db-url sqlite:////freqtrade/user_data/tradesv3.sqlite
      --config /freqtrade/user_data/config.json
      --strategy xxx
networks:
  default:
    external: true
    name: bot_2

核心疑问

  1. 有没有办法可以阻止机器人连接失败时自动重启?
  2. 还可以尝试哪些手段排查问题?

解决方案

禁止容器自动重启方法

直接修改docker-compose.yml中freqtrade服务的restart配置,将restart: unless-stopped改为restart: "no"即可;如果需要临时调试不修改配置,启动时加--restart no参数覆盖原有配置即可,容器崩溃后就不会自动重启,方便进入容器调试、查看日志。

问题排查手段

  • 先确认binance-proxy的监听地址:默认binance-proxy可能只监听容器内127.0.0.1地址,导致同网络其他容器无法访问,启动proxy时添加--listen 0.0.0.0:8092参数,强制监听所有网卡接口即可。
  • 端口连通性测试:用nc -zv 172.x.0.2 8092代替httping测试端口是否开放,ping通仅代表三层网络连通,不代表四层端口正常开放,httping不通大概率是服务未监听对应端口或者防火墙拦截。
  • 查看proxy容器日志:执行docker logs -f proxy_2查看proxy启动是否报错,是否收到Freqtrade的请求、返回的状态码是什么。
  • 检查端口冲突:每个bot的proxy都映射了宿主机的809x端口,确认启动新proxy时没有端口占用,执行netstat -tulpn | grep 8092即可查看宿主机端口是否被其他进程占用。
  • 静态IP配置修复:要给容器配置静态IP需要在创建Docker网络时指定子网范围,比如docker network create --subnet=172.24.0.0/16 bot_2,这样创建的网络才有固定网关,你之前docker inspect看不到网关就是因为创建网络时没有指定子网,是Docker自动分配的。
  • 改用服务名访问:不要用固定IP访问proxy,直接用容器名作为域名访问,比如proxy的容器名叫proxy_2,同网络的freqtrade容器里直接访问http://proxy_2:8092/api/v3即可,Docker自带DNS解析,比固定IP更稳定。

内容的提问来源于stack exchange,提问作者z3nth10n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:24:00