docker部署FastDFS文件系统详细记录,每个步骤都有详细记录。含linux和windows双系统安装教程

docker部署FastDFS文件系统详细记录
参考文章docker搭建FastDFS文件系统(最详细版)
文章里所有步骤由作者亲自测试,所以和 原文有不少差异
文章里所有步骤由作者亲自测试,所以和 原文有不少差异
文章里所有步骤由作者亲自测试,所以和 原文有不少差异

介绍

FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

  • fastdfs是一个文件系统,它对文件进行管理,功能包括:文件存储、文件上传和下载,解决了大容量存储和负载均衡的问题;

  • FastDFS架构包括 TrackerStorage。客户端请求 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 服务器。

示例命令分析

这个命令将启动一个FastDFSStorage 服务器,并使用主机网络模式,这意味着 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.txtFastDFS 系统。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的原因也会报错连接超时,也是个坑。

要实例化两个容器一个trackerstorage,而且这两个容器之间要通信,
但是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 检查通信是否正常

下面就看是否成功配置或者storagetracker成功通信
首先初步看fastdfs_storage_containerlogs来判断
在这里插入图片描述

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成功安装和配置

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙-极纪元JJY.Cheng

客官,1分钱也是爱,给个赏钱吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值