问题描述:
在阿里云上用 Docker 部署 FastDFS 后。
在服务器上测试上传没有问题,用连接访问服务器内图片也没有问题。
但在 Java 项目中却会一直报:
ConnectException: Connection timed out: connect
部署环境
- 阿里云 轻量级应用服务器:
CentOS 7 - 部署方式
- Docker 部署
- 使用镜像:
morunchang/fastdfs
- 项目使用语言:
Java - 使用的 FastDFS 版本及 jar 包
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
1. 确保服务器端口开放
确认 Tracker 和 Storage 服务器的端口都已开放给公网
1.1 参考博客
博客内容更为详细,建议观看
- FastDFS连接超时,ConnectException: Connection timed out: connect_Afelio的博客-CSDN博客_fastdfs连接失败
- 【用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服务器的端口
- 暂时不知道其中区别,好像两个都可以
- 猜测和使用的镜像有关系
- 使用
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 参考博客
博客内容更为详细,建议观看
4. 确保 项目 中的配置
配置文件中的
tracker_server需要等于
/etc/fdfs/storage.conf中的tracker_server
4.1 参考博客
博客内容更为详细,建议观看
5. 其他情况
5.1 docker安装fastdfs碰到storage的IP地址映射宿主地址问题
5.2 MAC 部署可能会遇到的问题
- Mac下使用Docker搭建FastDFS Java客户端 Connect Timeout_PeasantCoding的博客-CSDN博客_docker fastdfs部署后客户端
- 使用Docker搭建测试环境问题 · tobato/FastDFS_Client Wiki