问题
在 windows 下,docker 配置 fdfs 后,宿主机通过 tracker 配置的端口映射能够访问到,但是 storage 注册的时候提供的是 docker 容器内的 172.*.*.*
的 ip,这个 ip 是不能被 windows 宿主机直接访问的。
原因
docker for windows/mac 由于系统方面的原因,不支持常规帖子里提到的、linux 才支持的 --network=host
模式,最终导致了 windows 下通过 tracker 访问不到 storage 节点,更获取不到数据了。
思路
storage 节点的访问端口通过映射到宿主机上后,只需要把 172 指向宿主机,源端口访问即可
步骤
-
安装 windows 环回网卡,并改名为
lo0
(只是为了方便输入,其功能和 mac 下lo0
完全一致),具体百度。 -
docker-compose.yml 内定义桥接网段,指定 tracker 和 storage 的 ip。下面是我的 docker-compose.yml 文件
version: '3.5' # docker for windows 18+ services: tracker: image: luhuiguo/fastdfs container_name: tracker volumes: - './tracker:/var/fdfs' command: tracker ports: - '22122:22122' - '22180:8080' networks: fastdfs: ipv4_address: 172.21.0.110 storage: image: luhuiguo/fastdfs container_name: storage volumes: - './storage:/var/fdfs' environment: TRACKER_SERVER: 'tracker:22122' ports: - '23000:23000' ############## 此处重点关注 ############## - '23088:8888' ############## 此处重点关注 ############## depends_on: - tracker command: storage networks: fastdfs: ipv4_address: 172.21.0.120 networks: fastdfs: name: fastdfs ############## 避免生成网络的名称包含项目前缀 driver: bridge ipam: driver: default config: - subnet: 172.21.0.0/16
-
为之前添加的环回网卡添加 docker-compose.yml 中指定的 ip。具体百度
netsh interface ip add address
netsh interface ip add address "lo0" 172.21.0.110 255.255.0.0 netsh interface ip add address "lo0" 172.21.0.120 255.255.0.0
-
测试。文件上传和读取是没问题的。但是只能用来测试,某些情况下会出现问题。
其他
在多 tracker 和多 storage 的情况下,只需要挂载不同的配置文件,设定不同不同的端口就可以避免端口重复,以此就能建立 fdfs 集群了