Mac M1环境Docker Compose部署Flink出现Connection refused报错如何解决
排查步骤与解决方案
根因确认
从报错日志与docker ps输出可以确认:taskmanager尝试连接的9cf35ea13c8b:6123为历史jobmanager容器ID,和当前运行的jobmanager容器IDc211940acf41不符,属于旧环境残留或Flink RPC地址绑定配置缺失导致的连接失败。
分步处理
- 清理旧环境缓存
执行以下命令完全销毁旧容器、挂载卷与自定义网络,避免历史缓存干扰:
docker-compose down -v
- 补全docker-compose配置项
在原有配置基础上添加主机名、端口暴露、绑定地址配置,避免Flink默认绑定到容器内部回环地址或容器ID:
version: "2.2" services: jobmanager: image: arm64v8/flink:alpine hostname: jobmanager ports: - "8081:8081" expose: - "6123" # 测试连通性时可先替换为command: jobmanager,确认集群连通后再改回standalone-job command: standalone-job --job-classname com.job.ClassName [--job-id <job id>] [--fromSavepoint /path/to/savepoint [--allowNonRestoredState]] [job arguments] volumes: - ~/sg_flink/artifacts:/opt/flink/usrlib networks: - flink-network environment: - | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager jobmanager.rpc.bind-host: 0.0.0.0 jobmanager.bind-host: 0.0.0.0 parallelism.default: 2 taskmanager: image: arm64v8/flink:alpine depends_on: - jobmanager command: taskmanager scale: 1 volumes: - ~/sg_flink/artifacts:/opt/flink/usrlib networks: - flink-network environment: - | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager taskmanager.bind-host: 0.0.0.0 taskmanager.numberOfTaskSlots: 2 parallelism.default: 2 networks: flink-network:
注意:使用
standalone-job模式时必须将--job-classname后的参数替换为你实际的作业主类全限定名,否则jobmanager会启动失败,也会导致taskmanager连接被拒绝。
- 验证连通性
重新启动集群后,进入taskmanager容器执行以下命令验证网络连通性:
docker exec -it sg_flink_taskmanager_1 telnet jobmanager 6123
如果能正常连通,再访问http://localhost:8081查看Flink Web UI确认taskmanager是否已正常注册。
内容的提问来源于stack exchange,提问作者Joachim Karlsson
相关产品推荐
相关产品推荐

