【Spring Boot集成DOCKER+FDFS上传图片ERROR】无法获取服务端连接资源:can't create connection to/10.111.114.6:23000] with root cause.
前言
同事想要一套fdfs环境,但是公司要求相关服务只能装在docker容器中,且对容器的创建样式有一定要求,于是我毅然决然地开始了踩坑之路,特此记录。
容器创建
下载镜像:
docker image pull delron/fastdfs
使用docker-compose.yml,其中docker compose明细如下:
version: '2.2'
services:
fastdfs_server2:
image: docker.io/delron/fastdfs
container_name: fastdfs_server2
hostname: fastdfs-server2
volumes:
- ../fastdfs:/opt/fastdfs
cpus: 1
mem_limit: 2G
privileged: true
# command:
#- bash
#- -c
#- 'tail -f /dev/null'
environment:
TRACKER_SERVER: "10.111.114.6:22122"
ports:
- 5005:8888
- 5006:22122
- 23000:23000
networks:
20190116_aidata_network:
ipv4_address: 10.111.114.6
networks:
20190116_aidata_network:
external: true
启动容器后,本地上传文件是成功的,相关命令如下:
docker exec -it fastdfs_server2 /bin/bash;
# 上传命令
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/fastdfs/播求.jpg;
根据访问返回上传地址拼接宿主机IP访问相应的url:
OK,很完美是不是?
接下来用SpringBoot集成一下,测试一下增删改查(坑来了)。
- 这里说明一下,因为有定制需求,我的docker_compose.yml创建出来后会有command内的命令失效(不执行)现象,问题点我也定位到了,是因为有个启动脚本最后一句是"tail -f “$FASTDFS_LOG_FILE” ",导致进程卡住无法往后执行命令,所以我对容器本身做了一些定制化修改,主要的修改内容是/usr/bin/start1.sh脚本,目的是在进程卡死之前执行一些我想执行的操作,然后把这个版本保存为镜像(方便以后使用),我贴一下修改后的start1.sh代码:
#!/bin/bash
#set -e
if [ "$1" = "monitor" ] ; then
if [ -n "$TRACKER_SERVER" ] ; then
sed -i "s|tracker_server=.*$|tracker_server=${TRACKER_SERVER}|g" /etc/fdfs/client.conf
fi
fdfs_monitor /etc/fdfs/client.conf
exit 0
elif [ "$1" = "storage" ] ; then
FASTDFS_MODE="storage"
sed -i "s|store_path0.*$|store_path0=/var/fdfs|g" /etc/fdfs/mod_fastdfs.conf
sed -i "s|url_have_group_name =.*$|url_have_group_name = true|g" /etc/fdfs/mod_fastdfs.conf
/usr/local/nginx/sbin/nginx
else
FASTDFS_MODE="tracker"
fi
if [ -n "$PORT" ] ; then
sed -i "s|^port=.*$|port=${PORT}|g" /etc/fdfs/"