win10 + Docker-compose + Dockerfile 部署mall-portal,部分接口能正常访问,但获取验证码时返回500

系统:win10

部署步骤:

一、mall-portal在windows环境下的部署步骤(基于Docker-compose)

1、下载所有需要安装的Docker镜像

docker pull mysql:5.7
docker pull redis:7
docker pull nginx:1.22
docker pull rabbitmq:3.9-management
docker pull elasticsearch:7.17.3
docker pull kibana:7.17.3
docker pull logstash:7.17.3
docker pull mongo:4

2、在J:\docker\compose_mall下新建要挂载的目录,并将对应的配置或脚本文件复制粘贴到对应的目录中

\mydata\elasticsearch\data
\mydata\nginx\nginx.conf
\mydata\logstash\logstash.conf
\mydata\mysql\mall.sql

3、修改Logstash的配置文件logstash.conf中output节点下的Elasticsearch连接地址为es:9200

4、修改原文件中卷的路径,执行以下命令运行docker-compose-env.yml脚本创建容器

命令:docker-compose -f docker-compose-env.yml up -d

image

5、为了保证Elasticsearch能正常启动,执行以下命令修改系统内核参数

wsl -d docker-desktop
sysctl -w vm.max_map_count=262144
sysctl -p

6、将mall.sql文件拷贝到mysql容器的/目录下

docker cp \mydata\mall.sql mysql:\

7、进入mysql容器,连接mysql服务,创建并使用mall数据库,执行mall.sql脚本创建数据表,并在workbench中新建对应连接以方便查看数据变化

8、下载Elasticsearch的中文分词器analysis-ik,解压到\mydata\elasticsearch\plugins目录下,并重启Elasticsearch

9、进入logstash容器,执行以下命令安装json_lines插件,并重启logstash

docker exec -it logstash bash
logstash-plugin install logstash-codec-json_lines
docker restart logstash

10、访问http://localhost:15672进入rabbitmq登录页面,使用guest guest登录后,创建mall账号,并设置其为管理员,创建新的虚拟host为 /mall,并给mall用户配置访问/mall的权限

二、Docker开放远程API接口

1、windows防火墙添加进入规则

防火墙 → 高级设置 → 入站规则 → 新建规则 → 选择端口 → 选择TCP,特定本地端口输入2375 → 允许连接 → 三个全选 → name处填:Docker-2375 → Finish

2、docker设置 - docker engine添加端口规则

image

三、使用Dockerfile为mall-portal构建docker镜像

1、克隆mall项目到本地,并使用IDEA打开

2、将\mall\mall-portal\src\main\resources\application-dev.yml文件中的localhost全改成db

image

3、将mall\pom.xml中的docker.host修改为http://localhost:2375

image

4、打开Maven,双击mall-portal\Lifecycle\package进行打包,将生成的
mall-portal-1.0-SNAPSHOT.jar包复制粘贴到J:\docker\compose_mall\Dockerfile中

5、编写Dockerfile文件,并将其复制粘贴到J:\docker\compose_mall\Dockerfile中

image

image

6、在Dockerfile所在目录执行以下命令构建docker镜像

docker build -t mall/mall-portal:1.0-SNAPSHOT .

四、使用docker-compose启动mall-portal容器

执行命令:docker-compose -f docker-compose-app.yml up -d

image

结果图:

image

image

五、遇到的问题

基于以上步骤,环境搭建成功,接口文档能正常访问,但是在请求UmsMemberController中的/sso/getAuthCode接口时,服务器响应为500,但是HomeController中的接口能正常响应。麻烦老师帮忙看一下,是哪里还有问题?谢谢啦

image

image

image

不是很建议在win上折腾docker

有远程吗 我远程看看现象

问题已解决,主要有两个问题
1、docker中的redis是默认拒绝连接的,所以需要修改redis.conf文件
image

2、win-docker中mall-portal无法连接mysql等容器,所以报错,需要查看docker给每个容器分配的ip地址,将application-dev.yml中各容器的host,由db改成对应的ip地址,重新打包部署即可
以mysql为例:
image
image

这个应该还是有一个问题的,因为docker启动容器的时候都会随机分配ip等的,所以下次重启后可能又用不了了

1 个赞

我又试了一下,host直接填容器的名字也是可以的,谢谢老师提醒 :grin: