docker部署FastDFS文件系统详细记录
参考文章docker搭建FastDFS文件系统(最详细版)
文章里所有步骤由作者亲自测试,所以和 原文有不少差异
文章里所有步骤由作者亲自测试,所以和 原文有不少差异
文章里所有步骤由作者亲自测试,所以和 原文有不少差异
介绍
FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。
-
fastdfs是一个文件系统,它对文件进行管理,功能包括:文件存储、文件上传和下载,解决了大容量存储和负载均衡的问题;
-
FastDFS架构包括
Tracker
和Storage
。客户端请求Tracker
进行文件上传和下载,通过Tracker调度
最终由Storage完成上传和下载
; -
可以将
Tracker
称为 追踪服务器或者调度服务器,Storage 作用是文件存储
,客户端上传的文件最终存储在Storage服务器上
;
详细介绍请看文章《用FastDFS一步步搭建文件管理系统 》
1.查找FastDFS镜像
docker search fastdfs
结果如下图
发现没有参考文章里说的镜像源,我们重新查找
主要是为了和参考文章一致,以免出现其他错误,搞的措手不及
docker search delron/fastdfs
2.拉取镜像
docker pull delron/fastdfs
运行结果如下图,有警告,先不管他
这他报错了
第二次,搬梯子拉镜像
如下图:安装中。。。
3.查看镜像是否拉取成功
docker images
命令运行结果如下
PS C:\Users\Administrator> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 5ef79149e0ec 2 weeks ago 188MB
redis latest dae83f665c92 5 weeks ago 117MB
mysql latest 7ce93a845a8a 6 weeks ago 586MB
ruoyiadmin latest 47dae0ecd6da 2 years ago 526MB
delron/fastdfs latest 8487e86fc6ee 6 years ago 464MB
此时在列表里显示了delron/fastdfs
镜像
4.使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用):
docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker
4.1.参数解释
-d:
作用:后台运行容器。
说明:容器启动后会立即返回到命令行,容器会在后台继续运行。
-t:
作用:为容器分配一个伪终端(TTY)。
说明:即使没有附加到容器,容器也能接收标准输入。
-i:
作用:以交互模式运行容器。
说明:容器启动时会打开一个终端,允许用户与容器进行交互。
–network=host:
作用:使用主机网络模式。
说明:容器将直接使用宿主机的网络栈,而不是 Docker 网络栈。这意味着容器将使用宿主机的 IP 地址,并且容器中的网络端口将直接映射到宿主机的端口。
–name tracker:
作用:为容器指定一个名字。
说明:这个容器将以 tracker 作为名字,便于后续管理。
-v /var/fdfs/tracker:/var/fdfs:
作用:将宿主机上的目录 /var/fdfs/tracker 挂载到容器内的 /var/fdfs 目录。
说明:这使得容器可以访问宿主机上的文件系统,并且任何在容器内的 /var/fdfs 目录下的文件更改都会反映到宿主机的 /var/fdfs/tracker 目录中。
-v /etc/localtime:/etc/localtime:
作用:将宿主机的时区文件挂载到容器内的 /etc/localtime。
说明:这确保容器内的时区与宿主机一致。
delron/fastdfs:
作用:指定要运行的 Docker 镜像。
说明:使用名为 delron/fastdfs 的镜像来启动容器。
tracker:
作用:向容器传递命令行参数。
说明:这个参数告诉容器内的 FastDFS 服务启动 Tracker 服务器。
示例命令分析
这个命令将启动一个 FastDFS 的 Tracker 服务器,并使用主机网络模式,这意味着 Tracker 服务器将直接使用宿主机的网络接口。此外,它将宿主机上的 /var/fdfs/tracker 目录挂载到容器内的 /var/fdfs 目录,确保容器内的数据可以持久化到宿主机。
4.2.命令运行结果 如下图
PS C:\Users\Administrator> docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker
e6db730e680e3f59d70b63cc84f8ea5a83ea386654abf00a82eadefe26fd88da
4.3.查看运行的容器列表
docker ps
PS C:\Users\Administrator> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6db730e680e delron/fastdfs "/usr/bin/start1.sh …" 58 seconds ago Up 57 seconds tracker
ce174ae6c172 mysql "docker-entrypoint.s…" 2 weeks ago Up 2 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysqltest
这里的tracker
就是我们刚才运行的容器(跟踪服务器,起到调度的作用)
5.使用docker镜像构建storage容器(存储服务器,提供容量和备份服务)
TRACKER_SERVER=本机的ip地址
:22122 本机ip地址不要使用127.0.0.1
docker run -dti --network=host --name storage -e TRACKER_SERVER=192.168.1.3:22122 -v /var/fdfs/storage:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs storage
5.1.解析命令
命令是用来启动一个 FastDFS 的 Storage 服务器容器,并将其与一个已有的 Tracker 服务器关联起来。这个命令使用了 Docker 的 docker run 命令来启动一个容器,并指定了相关的参数和选项。让我们逐个解析这个命令:
参数解释
-d:
作用:后台运行容器。
说明:容器启动后会立即返回到命令行,容器会在后台继续运行。
-t:
作用:为容器分配一个伪终端(TTY)。
说明:即使没有附加到容器,容器也能接收标准输入。
-i:
作用:以交互模式运行容器。
说明:容器启动时会打开一个终端,允许用户与容器进行交互。
–network=host:
作用:使用主机网络模式。
说明:容器将直接使用宿主机的网络栈,而不是 Docker 网络栈。这意味着容器将使用宿主机的 IP 地址,并且容器中的网络端口将直接映射到宿主机的端口。
–name storage:
作用:为容器指定一个名字。
说明:这个容器将以 storage 作为名字,便于后续管理。
-e TRACKER_SERVER=192.168.1.3:22122:
作用:设置环境变量 TRACKER_SERVER。
说明:告诉 Storage 服务器要连接的 Tracker 服务器的地址和端口。在这个例子中,Tracker 服务器的地址是 192.168.1.3
,端口是 22122
。
-v /var/fdfs/storage:/var/fdfs:
作用:将宿主机上的目录 /var/fdfs/storage 挂载到容器内的 /var/fdfs 目录。
说明:这使得容器可以访问宿主机上的文件系统,并且任何在容器内的 /var/fdfs 目录下的文件更改都会反映到宿主机的 /var/fdfs/storage 目录中。
-v /etc/localtime:/etc/localtime:
作用:将宿主机的时区文件挂载到容器内的 /etc/localtime。
说明:这确保容器内的时区与宿主机一致。
delron/fastdfs:
作用:指定要运行的 Docker 镜像。
说明:使用名为 delron/fastdfs 的镜像来启动容器。
storage:
作用:向容器传递命令行参数。
说明:这个参数告诉容器内的 FastDFS
服务启动 Storage
服务器。
示例命令分析
这个命令将启动一个FastDFS
的 Storage
服务器,并使用主机网络模式,这意味着 Storage
服务器将直接使用宿主机的网络接口。此外,它将宿主机上的 /var/fdfs/storage
目录挂载到容器内的 /var/fdfs
目录,确保容器内的数据可以持久化到宿主机。
5.2.命令运行结果,如下图
PS C:\Users\Administrator> docker run -dti --network=host --name storage -e TRACKER_SERVER=192.168.1.3:22122 -v /var/fdfs/storage:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs storage
9a9c53be9bfc2a1c1bf61b04f897aeab47d69cbb9fccd6e373ffafe8253f7575
5.3.查看运行的容器列表,刚才我们运行的storage
容器是否在里面
PS C:\Users\Administrator> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9a9c53be9bfc delron/fastdfs "/usr/bin/start1.sh …" About a minute ago Up About a minute storage
e6db730e680e delron/fastdfs "/usr/bin/start1.sh …" 30 minutes ago Up 30 minutes tracker
ce174ae6c172 mysql "docker-entrypoint.s…" 2 weeks ago Up 2 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysqltest
ed38373c491f redis "docker-entrypoint.s…" 3 weeks ago Up 15 minutes 0.0.0.0:6379->6379/tcp redis-v1
6.进入storage容器,到storage的配置文件中配置http访问的端口,配置文件在/etc/fdfs目录下的storage.conf。
6.1.进入storage容器命令
#进入容器
docker exec -it storage bash
#进入目录
cd /etc/fdfs/
#编辑文件
vi storage.conf
6.2.如果你是windows下的docker进入
点击左上角的Containers
>进入容器列表>点击你要进入的容器名称>然后再点击Files
找到文件后>右键文件》点击Edit file
,进入编辑
/etc/fdfs/storage.conf文件内容
# is this config file disabled
# false for enabled
# true for disabled
disabled=false
# the name of the group this storage server belongs to
#
# comment or remove this item for fetching from tracker server,
# in this case, use_storage_id must set to true in tracker.conf,
# and storage_ids.conf must be configed correctly.
group_name=group1
# bind an address of this host
# empty for bind all addresses of this host
bind_addr=
# if bind an address of this host when connect to other servers
# (this storage server as a client)
# true for binding the address configed by above parameter: "bind_addr"
# false for binding any address of this host
client_bind=true
# the storage server port
port=23000
# connect timeout in seconds
# default value is 30s
connect_timeout=30
# network timeout in seconds
# default value is 30s
network_timeout=60
# heart beat interval in seconds
heart_beat_interval=30
# disk usage report interval in seconds
stat_report_interval=60
# the base path to store data and log files
base_path=/var/fdfs
# max concurrent connections the server supported
# default value is 256
# more max_connections means more memory will be used
max_connections=256
# the buff size to recv / send data
# this parameter must more than 8KB
# default value is 64KB
# since V2.00
buff_size = 256KB
# accept thread count
# default value is 1
# since V4.07
accept_threads=1
# work thread count, should <= max_connections
# work thread deal network io
# default value is 4
# since V2.00
work_threads=4
# if disk read / write separated
## false for mixed read and write
## true for separated read and write
# default value is true
# since V2.00
disk_rw_separated = true
# disk reader thread count per store base path
# for mixed read / write, this parameter can be 0
# default value is 1
# since V2.00
disk_reader_threads = 1
# disk writer thread count per store base path
# for mixed read / write, this parameter can be 0
# default value is 1
# since V2.00
disk_writer_threads = 1
# when no entry to sync, try read binlog again after X milliseconds
# must > 0, default value is 200ms
sync_wait_msec=50
# after sync a file, usleep milliseconds
# 0 for sync successively (never call usleep)
sync_interval=0
# storage sync start time of a day, time format: Hour:Minute
# Hour from 0 to 23, Minute from 0 to 59
sync_start_time=00:00
# storage sync end time of a day, time format: Hour:Minute
# Hour from 0 to 23, Minute from 0 to 59
sync_end_time=23:59
# write to the mark file after sync N files
# default value is 500
write_mark_file_freq=500
# path(disk or mount point) count, default value is 1
store_path_count=1
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/var/fdfs
#store_path1=/var/fdfs2
# subdir_count * subdir_count directories will be auto created under each
# store_path (disk), value can be 1 to 256, default value is 256
subdir_count_per_path=256
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=192.168.1.3:22122
#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info
#unix group name to run this program,
#not set (empty) means run by the group of current user
run_by_group=
#unix username to run this program,
#not set (empty) means run by current user
run_by_user=
# allow_hosts can ocur more than once, host can be hostname or ip address,
# "*" (only one asterisk) means match all ip addresses
# we can use CIDR ips like 192.168.5.64/26
# and also use range like these: 10.0.1.[0-254] and host[01-08,20-25].domain.com
# for example:
# allow_hosts=10.0.1.[1-15,20]
# allow_hosts=host[01-08,20-25].domain.com
# allow_hosts=192.168.5.64/26
allow_hosts=*
# the mode of the files distributed to the data path
# 0: round robin(default)
# 1: random, distributted by hash code
file_distribute_path_mode=0
# valid when file_distribute_to_path is set to 0 (round robin),
# when the written file count reaches this number, then rotate to next path
# default value is 100
file_distribute_rotate_count=100
# call fsync to disk when write big file
# 0: never call fsync
# other: call fsync when written bytes >= this bytes
# default value is 0 (never call fsync)
fsync_after_written_bytes=0
# sync log buff to disk every interval seconds
# must > 0, default value is 10 seconds
sync_log_buff_interval=10
# sync binlog buff / cache to disk every interval seconds
# default value is 60 seconds
sync_binlog_buff_interval=10
# sync storage stat info to disk every interval seconds
# default value is 300 seconds
sync_stat_file_interval=300
# thread stack size, should >= 512KB
# default value is 512KB
thread_stack_size=512KB
# the priority as a source server for uploading file.
# the lower this value, the higher its uploading priority.
# default value is 10
upload_priority=10
# the NIC alias prefix, such as eth in Linux, you can see it by ifconfig -a
# multi aliases split by comma. empty value means auto set by OS type
# default values is empty
if_alias_prefix=
# if check file duplicate, when set to true, use FastDHT to store file indexes
# 1 or yes: need check
# 0 or no: do not check
# default value is 0
check_file_duplicate=0
# file signature method for check file duplicate
## hash: four 32 bits hash code
## md5: MD5 signature
# default value is hash
# since V4.01
file_signature_method=hash
# namespace for storing file indexes (key-value pairs)
# this item must be set when check_file_duplicate is true / on
key_namespace=FastDFS
# set keep_alive to 1 to enable persistent connection with FastDHT servers
# default value is 0 (short connection)
keep_alive=0
# you can use "#include filename" (not include double quotes) directive to
# load FastDHT server list, when the filename is a relative path such as
# pure filename, the base path is the base path of current/this config file.
# must set FastDHT server list when check_file_duplicate is true / on
# please see INSTALL of FastDHT for detail
##include /home/yuqing/fastdht/conf/fdht_servers.conf
# if log to access log
# default value is false
# since V4.00
use_access_log = false
# if rotate the access log every day
# default value is false
# since V4.00
rotate_access_log = false
# rotate access log time base, time format: Hour:Minute
# Hour from 0 to 23, Minute from 0 to 59
# default value is 00:00
# since V4.00
access_log_rotate_time=00:00
# if rotate the error log every day
# default value is false
# since V4.02
rotate_error_log = false
# rotate error log time base, time format: Hour:Minute
# Hour from 0 to 23, Minute from 0 to 59
# default value is 00:00
# since V4.02
error_log_rotate_time=00:00
# rotate access log when the log file exceeds this size
# 0 means never rotates log file by log file size
# default value is 0
# since V4.02
rotate_access_log_size = 0
# rotate error log when the log file exceeds this size
# 0 means never rotates log file by log file size
# default value is 0
# since V4.02
rotate_error_log_size = 0
# keep days of the log files
# 0 means do not delete old log files
# default value is 0
log_file_keep_days = 0
# if skip the invalid record when sync file
# default value is false
# since V4.02
file_sync_skip_invalid_record=false
# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false
# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600
# use the ip address of this storage server if domain_name is empty,
# else this domain name will ocur in the url redirected by the tracker server
http.domain_name=
# the port of the web server on this storage server
http.server_port=8888
默认端口是8888,也可以不进行更改。
默认端口是8888,也可以不进行更改。
默认端口是8888,也可以不进行更改。
默认端口是8888,也可以不进行更改。
默认端口是8888,也可以不进行更改。
默认端口是8888,也可以不进行更改。
7.修改storage中的nginx 不需要安装
cd /usr/local/nginx/conf
vi nginx.conf
(水印是故意留的,致敬原作者)
7.1.nginx.conf文件内容
/usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
8.修改完重启容器,没有修改就不需要重启
docker stop storage
docker start storage
如果重启后无法启动的会,可能是报下面错误了,手动创建 vi /var/fdfs/logs/storaged.log
文件即可
tail: cannot open '/var/fdfs/logs/storaged.log' for reading: No such file or directory
9.添加端口规则
9.1.linux配置端口号
firewall-cmd --zone=public --permanent --add-port=8888/tcp
firewall-cmd --zone=public --permanent --add-port=22122/tcp
firewall-cmd --zone=public --permanent --add-port=23000/tcp
linux重启防火墙
systemctl restart firewalld
9.2.windows配置端口号
netsh advfirewall firewall add rule name="Allow TCP Port 8888" protocol=TCP dir=in localport=8888 action=allow
netsh advfirewall firewall add rule name="Allow TCP Port 22122" protocol=TCP dir=in localport=22122 action=allow
netsh advfirewall firewall add rule name="Allow TCP Port 23000" protocol=TCP dir=in localport=23000 action=allow
配置好后,打开防火墙查看
windows重启防火墙
停止防火墙服务
sc stop MpsSvc
重新启动防火墙服务:
sc start MpsSvc
windows 一次性重启防火墙
sc stop MpsSvc && sc start MpsSvc
10.测试
进入storage容器,进入/var/fdfs目录
docker exec -it storage bash
cd /var/fdfs
echo hello 这是我的第一个测试文件,大家觉得不错关注下博主呗>a.txt
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.txt
10.1.解析这些命令:
步骤 1: 进入容器
docker exec -it storage bash
- 这条命令让你进入名为
storage
的容器内部,并启动一个交互式的Bash shell
。这使得你可以在容器内部执行命令。 - 使用
docker exec
命令进入容器内部,启动一个交互式的Bash shell
。
步骤 2: 切换到文件目录
cd /var/fdfs
- 这条命令将当前工作目录切换到
/var/fdfs
,这是FastDFS
存储文件的默认目录。 - 进入 FastDFS 的存储目录
/var/fdfs
,这是FastDFS
存储文件的默认目录。
步骤 3: 创建文件
echo hello 这是我的第一个测试文件,大家觉得不错关注下博主呗 > a.txt
- 这条命令创建一个名为
a.txt
的文件,并向文件中写入一行文本:“hello 这是我的第一个测试文件,大家觉得不错关注下博主呗”
。 - 使用
echo
命令创建一个名为a.txt
的文件,并向文件写入指定的内容。
步骤 4: 上传文件到 FastDFS
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.txt
- 这条命令使用 FastDFS 客户端工具将
a.txt
文件上传到FastDFS
系统中。/etc/fdfs/client.conf
是客户端配置文件,包含了 FastDFS 系统的 Tracker 服务器地址等信息。 - 使用
fdfs_upload_file
命令上传文件a.txt
到FastDFS
系统。client.conf
配置文件包含了 Tracker 服务器的地址等信息,用于连接 FastDFS 系统
。
10.2.我这里执行报错了
PS C:\Users\Administrator> docker exec -it storage bash
[root@docker-desktop nginx-1.12.2]# cd /var/fdfs
[root@docker-desktop fdfs]# echo hello 这是我的第一个测试文件,大家觉得不错关注下博主呗>a.txt
[root@docker-desktop fdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.txt
[2024-09-04 08:45:03] ERROR - file: connection_pool.c, line: 130, connect to 192.168.1.3:22122 fail, errno: 111, error info: Connection refused
10.2.1
10.2.1.解决错误步骤-方法 1:查看容器的启动命令
我们在启动Tracker 时,用的是–network=host模式;所以这个过,不考虑这个方法
如果你知道启动 Tracker 服务器容器时所使用的命令,可以检查命令中是否有显式的端口配置。例如,在启动 Tracker 服务器容器时,你可能设置了环境变量或挂载了配置文件,其中包含了端口号。
假设你启动 Tracker 服务器容器时使用了以下命令:
docker run -dti --name tracker -e TRACKER_PORT=22122 -v /path/to/config:/etc/fdfs delron/fastdfs tracker
你可以检查命令中的 -e TRACKER_PORT=22122,这里指定了 Tracker 服务器使用的端口为 22122。
10.2.2.解决错误步骤-方法 2:检查容器内的配置文件
1.进入容器:
确保你的容器已经启动
docker exec -it tracker bash
2.查看配置文件:
cat /etc/fdfs/tracker.conf
在配置文件中,你应该能找到类似以下的配置:
port=22122
10.2.3.解决错误步骤-方法3:检查容器的日志
你可以查看容器的日志,看看启动时是否有输出端口号的信息。
1.查看容器的日志:
docker logs tracker
日志中可能会有类似以下的信息:
[2023-10-01 12:00:00] INFO: Tracker server started on port 22122
我的信息是这样的
2024-09-04 18:05:17 try to start the tracker node…
2024-09-04 18:05:17 [2024-09-04 10:05:17] INFO - FastDFS v5.11, base_path=/var/fdfs, run_by_group=, run_by_user=, connect_timeout=30s, network_timeout=60s, port=22122, bind_addr=, max_connections=256, accept_threads=1, work_threads=4, min_buff_size=8192, max_buff_size=131072, store_lookup=2, store_group=, store_server=0, store_path=0, reserved_storage_space=10.00%, download_server=0, allow_ip_count=-1, sync_log_buff_interval=10s, check_active_interval=120s, thread_stack_size=64 KB, storage_ip_changed_auto_adjust=1, storage_sync_file_max_delay=86400s, storage_sync_file_max_time=300s, use_trunk_file=0, slot_min_size=256, slot_max_size=16 MB, trunk_file_size=64 MB, trunk_create_file_advance=0, trunk_create_file_time_base=02:00, trunk_create_file_interval=86400, trunk_create_file_space_threshold=20 GB, trunk_init_check_occupying=0, trunk_init_reload_from_binlog=0, trunk_compress_binlog_min_interval=0, use_storage_id=0, id_type_in_filename=ip, storage_id_count=0, rotate_error_log=0, error_log_rotate_time=00:00, rotate_error_log_size=0, log_file_keep_days=0, store_slave_file_use_link=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s
10.2.4.解决错误步骤-方法 4:使用 netstat 命令
你也可以在容器内部使用 netstat
命令来查看 Tracker
服务器监听的端口。
1.进入容器
docker exec -it tracker bash
2.使用 netstat
命令查看监听的端口:
netstat -ntlp
输出中应该包含类似以下的信息:
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 12345/fastdfs-tracker
我的截图
10.2.5.解决错误步骤-方法 5:检查容器的端口映射
如果你在启动容器时指定了端口映射,可以通过检查 Docker 的端口映射来确定 Tracker 服务器使用的端口。
查看容器的端口映射:
docker port tracker
输出应该类似于:
22122/tcp -> 0.0.0.0:22122
我的截图
10.2.6.解决错误步骤-方法 6:检查 FastDFS 客户端配置文件
如果你有 FastDFS 客户端配置文件,可以检查其中的 Tracker 服务器地址和端口配置。
查看客户端配置文件:
容器storage
cat /etc/fdfs/client.conf
在配置文件中,你应该能找到类似以下的配置:
tracker_server=192.168.1.3:22122
我的截图
通过上述方法之一,你应该能够确定 Docker 容器中的 Tracker 服务器所使用的端口号。如果在启动容器时没有显式指定端口,通常 Tracker 服务器默认使用的端口是 22122。
10.3.经过上面步骤,我的还是报错,真是TNND
其实,我执行到里,
错误还是没有搞定,
就差重启电脑了,
明天继续
截图留存
我看了容器storage的日志,有报错
截图
截图内容
2024-09-04 18:38:58 ngx_http_fastdfs_set pid=9
2024-09-04 18:38:58 try to start the storage node…
2024-09-04 18:39:03 [2024-09-04 10:38:58] INFO - FastDFS v5.11, base_path=/var/fdfs, store_path_count=1, subdir_count_per_path=256, group_name=group1, run_by_group=, run_by_user=, connect_timeout=30s, network_timeout=60s, port=23000, bind_addr=, client_bind=1, max_connections=256, accept_threads=1, work_threads=4, disk_rw_separated=1, disk_reader_threads=1, disk_writer_threads=1, buff_size=256KB, heart_beat_interval=30s, stat_report_interval=60s, tracker_server_count=1, sync_wait_msec=50ms, sync_interval=0ms, sync_start_time=00:00, sync_end_time=23:59, write_mark_file_freq=500, allow_ip_count=-1, file_distribute_path_mode=0, file_distribute_rotate_count=100, fsync_after_written_bytes=0, sync_log_buff_interval=10s, sync_binlog_buff_interval=10s, sync_stat_file_interval=300s, thread_stack_size=512 KB, upload_priority=10, if_alias_prefix=, check_file_duplicate=0, file_signature_method=hash, FDHT group count=0, FDHT server count=0, FDHT key_namespace=, FDHT keep_alive=0, HTTP server port=8888, domain name=, use_access_log=0, rotate_access_log=0, access_log_rotate_time=00:00, rotate_error_log=0, error_log_rotate_time=00:00, rotate_access_log_size=0, rotate_error_log_size=0, log_file_keep_days=0, file_sync_skip_invalid_record=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s
2024-09-04 18:39:20 [2024-09-04 10:39:19] ERROR - file: storage_ip_changed_dealer.c, line: 186, connect to tracker server 192.168.1.3:22122 fail, errno: 111, error info: Connection refused
2024-09-04 18:39:41 [2024-09-04 10:39:40] ERROR - file: storage_ip_changed_dealer.c, line: 186, connect to tracker server 192.168.1.3:22122 fail, errno: 111, error info: Connection refused
2024-09-04 18:40:02 [2024-09-04 10:40:01] ERROR - file: storage_ip_changed_dealer.c, line: 186, connect to tracker server 192.168.1.3:22122 fail, errno: 111, error info: Connection refused
2024-09-04 18:40:23 [2024-09-04 10:40:22] ERROR - file: storage_ip_changed_dealer.c, line: 186, connect to tracker server 192.168.1.3:22122 fail, errno: 111, error info: Connection refused
2024-09-04 18:40:44 [2024-09-04 10:40:44] ERROR - file: storage_ip_changed_dealer.c, line: 186, connect to tracker server 192.168.1.3:22122 fail, errno: 111, error info: Connection refused
2024-09-04 18:41:05 [2024-09-04 10:41:05] ERROR - file: storage_ip_changed_dealer.c, line: 186, connect to tracker server 192.168.1.3:22122 fail, errno: 111, error info: Connection refused
2024-09-04 18:41:26 [2024-09-04 10:41:26] ERROR - file: storage_ip_changed_dealer.c, line: 186, connect to tracker server 192.168.1.3:22122 fail, errno: 111, error info: Connection refused
容器tracker的日志 ,没有报错
截图
截图内容
2024-09-04 18:38:51 try to start the tracker node…
2024-09-04 18:38:51 [2024-09-04 10:38:51] INFO - FastDFS v5.11, base_path=/var/fdfs, run_by_group=, run_by_user=, connect_timeout=30s, network_timeout=60s, port=22122, bind_addr=, max_connections=256, accept_threads=1, work_threads=4, min_buff_size=8192, max_buff_size=131072, store_lookup=2, store_group=, store_server=0, store_path=0, reserved_storage_space=10.00%, download_server=0, allow_ip_count=-1, sync_log_buff_interval=10s, check_active_interval=120s, thread_stack_size=64 KB, storage_ip_changed_auto_adjust=1, storage_sync_file_max_delay=86400s, storage_sync_file_max_time=300s, use_trunk_file=0, slot_min_size=256, slot_max_size=16 MB, trunk_file_size=64 MB, trunk_create_file_advance=0, trunk_create_file_time_base=02:00, trunk_create_file_interval=86400, trunk_create_file_space_threshold=20 GB, trunk_init_check_occupying=0, trunk_init_reload_from_binlog=0, trunk_compress_binlog_min_interval=0, use_storage_id=0, id_type_in_filename=ip, storage_id_count=0, rotate_error_log=0, error_log_rotate_time=00:00, rotate_error_log_size=0, log_file_keep_days=0, store_slave_file_use_link=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s
经过查询发现是以下原因造成的,
Windows
里面不能像Linux
一样用--network=host
这样来设置Windows
里面不能像Linux
一样用--network=host
这样来设置Windows
里面不能像Linux
一样用--network=host
这样来设置
解决方案请看下文《11.Windows系统可以这样操作》
11.Windows系统可以这样操作
参考文章1:windows11环境docker安装和配置FastDFS
参考文章2:Windows(和macos)下Java客户端使用docker安装的fastdfs服务
- 咱们上面的错误就是由下面这个原因造成的
- 咱们上面的错误就是由下面这个原因造成的
- 咱们上面的错误就是由下面这个原因造成的
- 咱们上面的错误就是由下面这个原因造成的
- 咱们上面的错误就是由下面这个原因造成的
--network=host
这个配置只能再Linux系统有效!!!
对docker不熟悉,可能是个坑。
其次,使用Windows
环境下docker
安装的fastdfs
,因为docker虚拟IP
的原因也会报错连接超时,也是个坑。
要实例化两个容器一个
tracker
和storage
,而且这两个容器之间要通信,
但是Windows
里面不能像Linux
一样用--network=host
这样来设置,
所以要自定义一个network
以供这两个容器通信
命令如下
11.1首先要pull一下FastDFS镜像
docker pull delron/fastdfs:latest
- 详细操作请看上面流程
- 详细操作请看上面流程
- 详细操作请看上面流程
11.2 创建自定义网络fastdfs_network
创建自定义网络fastdfs_network
docker network create fastdfs_network
查询现有网络确定成功创建网络fastdfs_network
docker network ls
控制台内容
PS C:\Users\Administrator> docker network ls
NETWORK ID NAME DRIVER SCOPE
ceaedb555317 bridge bridge local
da393821e009 fastdfs_network bridge local
5d830085da7d host host local
06b83e22fddf none null local
11.3 创建fastdfs_tracker_container
主机名为tracker
windows命令
docker run -it -d --name fastdfs_tracker_container -h tracker --network=fastdfs_network -p 22122:22122 -v D:/1TestCode/docker/volume/fastdfs/fastdfs_tracker_container/tracker:/var/fdfs delron/fastdfs:latest tracker
对比linux命令
docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker
windows命令
docker run -it -d --name fastdfs_tracker_container -h tracker --network=fastdfs_network -p 22122:22122 -v D:/1TestCode/docker/volume/fastdfs/fastdfs_tracker_container/tracker:/var/fdfs delron/fastdfs:latest tracker
- 请注意
D:/1TestCode/docker/volume/fastdfs/fastdfs_tracker_container/tracker
- 请注意
D:/1TestCode/docker/volume/fastdfs/fastdfs_tracker_container/tracker
- 请注意
D:/1TestCode/docker/volume/fastdfs/fastdfs_tracker_container/tracker
运行结果截图
查看容器列表截图
11.4 创建fastdfs_storage_container 主机名为storage
windows命令
docker run -it -d --name fastdfs_storage_container -h storage --network=fastdfs_network -p 8888:8888 -p 23000:23000 -e TRACKER_SERVER=192.168.1.3:22122 -v D:/1TestCode/docker/volume/fastdfs/fastdfs_storage_container/storage:/var/fdfs delron/fastdfs:latest storage
对比linux命令
docker run -dti --network=host --name storage -e TRACKER_SERVER=192.168.1.3:22122 -v /var/fdfs/storage:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs storage
windows命令
docker run -it -d --name fastdfs_storage_container -h storage --network=fastdfs_network -p 8888:8888 -p 23000:23000 -e TRACKER_SERVER=192.168.1.3:22122 -v D:/1TestCode/docker/volume/fastdfs/fastdfs_storage_container/storage:/var/fdfs delron/fastdfs:latest storage
- 请注意
D:/1TestCode/docker/volume/fastdfs/fastdfs_storage_container/storage
- 请注意
D:/1TestCode/docker/volume/fastdfs/fastdfs_storage_container/storage
- 请注意
D:/1TestCode/docker/volume/fastdfs/fastdfs_storage_container/storage
运行结果截图
11.5 检查通信是否正常
下面就看是否成功配置或者storage
和tracker
成功通信
首先初步看fastdfs_storage_container
的logs
来判断
2024-09-06 10:44:28 [2024-09-06 02:44:28] INFO - file: tracker_client_thread.c, line: 310,
successfully
connect to tracker server 192.168.1.3:22122, as a tracker client, my ip is 172.18.0.3
如果如图片上面 显示succuessfully connect to tracker server 说明成功
11.6 检查storage挂载是否成功
在之前我们挂载的 D:/1TestCode/docker/volume/fa stdfs/fastdfs_storage_container/storage
创建
test.txt和 a.txt
然后我们看到容器的目录也会出现test.txt 和 a.txt
如下图
11.7 上传文件
进入storage容器,进入/var/fdfs目录
使用命令
docker exec -it storage bash
cd /var/fdfs
echo hello 这是我的第一个测试文件,大家觉得不错关注下博主呗>a1.txt
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf a1.txt
windows系统下另一种方式使用命令
fdfs_upload_file /etc/fdfs/client.conf /var/fdfs/test.txt
11.8 下载文件
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBIAA2bab_mAeLoRAAAAXKWW-u8333.txt /var/fdfs/test2.txt
执行此命令需要进入storage
容器
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBIAA2bab_mAeLoRAAAAXKWW-u8333.txt /var/fdfs/test2.txt
命令运行结果截图
然后就可以在Windows 的D:\1TestCode\docker\volume\fastdfs\fastdfs_storage_container\storage
里找到test2.txt
文件
到此,windows
环境下的fastdfs
成功安装和配置