部署mall电商系统踩坑记录
一、 mysql
docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
问题1:
dockers run之后,docker ps 发现容器Exited了
运行 docker logs mysql
,显示 mysqld: Can't read dir of '/etc/mysql/conf.d/'
解决:
https://blog.csdn.net/qq_45564783/article/details/126440171
查找资料知道了,mysql修改了配置文件路径
- 不带配置文件映射启动mysql
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
- 查看容器运行情况并顺便复制容器id
docker ps
- 把容器的配置文件复制出来
docker cp 940c01a21882:/etc/mysql/ /mydata/mysql/conf
(940c01a21882是容器id) - 进入/mydata/mysql/conf路径,查看复制出来的文件
cd /mydata/mysql/conf
mysql文件夹下有三个文件 conf.d my.cnf mysql.conf.d
- 因为关联的是/mydata/mysql/conf这个路径,所以把这三个文件全部复制到/mydata/mysql/conf路径下
cp -r conf.d/ /mydata/mysql/conf
cp my.cnf /mydata/mysql/conf
cp -r mysql.conf.d /mydata/mysql/conf
- 配置文件my.cnf中 !includedir 的路径为my.conf.d,但是这个文件已经没有了,所以要更改my.conf.d为conf.d
vim my.cnf
- 停止运行容器并删除容器
docker stop mysql
docker rm mysql
- 重新创建容器
- docker ps 查看mysql运行正常,问题解决
三、nginx
问题1:
启动容器后nginx立马exit,查看docker logs
nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
解决:
第一次启动容器,教程命令为
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx:1.22
改为
docker run -p 80:80 --name nginx \
-d nginx:1.22
不挂载文件
四、Elasticsearch
启动 容器
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.17.3
问题1
启动容器报错
docker: Error response from daemon: driver failed programming external connectivity on endpoint elasticsearch (3154e04c8d09de6bcb02a7a441d32f8ff4315b67cc32da6879f): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9301 -j DNAT --to-destination 172.17.0.5:9300 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1)).
解决:
https://blog.csdn.net/qq_24452475/article/details/83901620
更改防火墙配置后导致的,需要重启docker
- 重启docker服务
service docker restart
- 删除已创建的Elasticsearch容器
docker rm elasticsearch
- 再次重新创建容器,成功
五、访问接口文档地址
mall-admin的api接口文档地址:http://192.168.3.101:8080/swagger-ui/
问题:
更改为服务器地址,访问提示“{"code":401,"data":"Full authentication is required to access this resource","message":"暂未登录或token已经过期"}”
解决:
地址错误,改为http://192.168.2.1:8080/swagger-ui.html#/