阿里云 Docker 部署 FastDFS 时连接失败 Connection timed out

715 阅读3分钟

问题描述:

在阿里云上用 Docker 部署 FastDFS 后。

在服务器上测试上传没有问题,用连接访问服务器内图片也没有问题。

但在 Java 项目中却会一直报:ConnectException: Connection timed out: connect

部署环境

  1. 阿里云 轻量级应用服务器:CentOS 7
  2. 部署方式
    1. Docker 部署
    2. 使用镜像:morunchang/fastdfs
  3. 项目使用语言:Java
  4. 使用的 FastDFS 版本及 jar 包
    <dependency>
        <groupId>net.oschina.zcx7878</groupId>
        <artifactId>fastdfs-client-java</artifactId>
        <version>1.27.0.0</version>
    </dependency>

1. 确保服务器端口开放

确认 Tracker 和 Storage 服务器的端口都已开放给公网

确保服务器端口开放.png

1.1 参考博客

博客内容更为详细,建议观看

  1. FastDFS连接超时,ConnectException: Connection timed out: connect_Afelio的博客-CSDN博客_fastdfs连接失败
  2. 【用docker快速搭建FastDFS文件系统】 【精准空降到 25:36】- bilibili - UP:ZJU追梦人

2. 确保 Docker 容器端口开放

确保 Docker 容器中对应的端口与服务器共通

2.1 方式一:创建容器的时候将宿主机的网络应用于容器

使用 --network=host 网络模式

# Tracker
docker run -d --name tracker \
--net=host \
morunchang/fastdfs \
sh tracker.sh

# Storage
docker run -d --name storage \
--net=host \
-e TRACKER_IP=192.168.200.128:22122 \
-e GROUP_NAME=group1 \
morunchang/fastdfs \
sh storage.sh

2.2 方式二:创建容器时指定端口号

-p 22122:22122

# Tracker
docker run -d --name tracker \
-p 22122:22122 \
morunchang/fastdfs \
sh tracker.sh

# Storage
docker run -d --name storage \
-p 23000:23000 \
-e TRACKER_IP=192.168.200.128:22122 \
-e GROUP_NAME=group1 \
morunchang/fastdfs \
sh storage.sh

3. 确保 Tracker 和 Storage 的连接

3.1 创建 Storage 容器的时候,指定环境变量

-e TRACKER_IP=Tracker服务器公网IP:Tracker服务器的端口


:网上有两种写法

  • TRACKER_SERVER=Tracker服务器公网IP:Tracker服务器的端口
  • TRACKER_IP=Tracker服务器公网IP:Tracker服务器的端口
  1. 暂时不知道其中区别,好像两个都可以
  2. 猜测和使用的镜像有关系
    1. 使用 morunchang/fastdfs 镜像的,用的环境变量都是 TRACKER_IP
# 写法一: morunchang/fastdfs 镜像
docker run -d --name storage \
-p 23000:23000 \
-e TRACKER_IP=192.168.200.128:22122 \
-e GROUP_NAME=group1 morunchang/fastdfs \
sh storage.sh

# 写法二: delron/fastdfs 镜像
docker run -d --name storage \
-p 23000:23000 \
-e TRACKER_SERVER=192.168.200.128:22122 \
-e GROUP_NAME=group1 delron/fastdfs \
storage

3.2 确保文件内容正确

都需要在配置文件中指定 Tracker 的服务器地址

3.2.1 Tracker 服务器配置文件

保证 /etc/fdfs/client.conf 文件中 tracker_server=服务器公网IP:22122

# 1. 进入 Tracker 容器
docker exec -it tracker bash

# 2. 查看 client.conf 文件
cat /etc/fdfs/client.conf

# 3. 找到这一行
# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
# tracker_server=服务器公网IP:22122
tracker_server=192.168.200.128:22122

# 4. 复制到 docker 外后,修改文件中的 服务器IP
# 4.1 复制到容器外
docker cp trakcer:/etc/fdfs/client.conf /usr/local/server/fastdfs/
# 4.2 修改
vi /usr/local/server/fastdfs/client.conf
# 4.3 替换回去
docker cp /usr/local/server/fastdfs/client.conf tracker:/etc/fdfs 

3.2.2 Storage 服务器配置文件

保证 /etc/fdfs/storage.conf 文件中 tracker_server=服务器公网IP:22122

操作步骤类似 Tracker,此处不再演示

3.2.3 参考博客

博客内容更为详细,建议观看

  1. Docker中搭建FastDFS文件系统(多图教程)_docker-安全小天地

4. 确保 项目 中的配置

配置文件中的 tracker_server

需要等于

/etc/fdfs/storage.conf 中的 tracker_server

4.1 参考博客

博客内容更为详细,建议观看

  1. FastDFS(fdfs)遇到的坑之一,本地fastdfs-client-java开发上传图片报错:java.net.SocketTimeoutException: connect timed out_Mr.Java.的博客-CSDN博客

5. 其他情况

5.1 docker安装fastdfs碰到storage的IP地址映射宿主地址问题

  1. docker安装fastdfs碰到storage的IP地址映射宿主地址问题 - zhangzongshan - 博客园

5.2 MAC 部署可能会遇到的问题

  1. Mac下使用Docker搭建FastDFS Java客户端 Connect Timeout_PeasantCoding的博客-CSDN博客_docker fastdfs部署后客户端
  2. 使用Docker搭建测试环境问题 · tobato/FastDFS_Client Wiki

5.3 网络策略限制了5位数以上端口号的使用

  1. fastdfs两种java客户端的使用及踩坑_bcz1992的博客-CSDN博客_fastdfs-client-java