docker部署微服务

在微服务尝试访问Docker中的MySQL容器时遇到Accessdenied错误,问题源于数据卷挂载导致的密码覆盖。尝试通过修改数据库中的root用户密码来解决,首先错误地修改了root@localhost的密码,最终成功解决方法是修改root@%的密码,允许所有远程主机访问。

微服务访问docker中的mysql容器,查看日志发现Access denied for user ‘root‘@‘某IP地址‘ (using password: YES)

前提条件:我在微服务中连接mysql时提供的用户名和密码均是root

猜想1:微服务中application.yml中提供的root密码和数据库不符

矛盾点:部署微服务时,docker-compose.yml中mysql容器的环境配置有明确写上用户密码为root
验证:进入mysql容器内部,使用root密码登录数据库,发现登录不上去
出现矛盾可能原因:我在创建mysql容器时,将包含数据库文件的数据卷挂载到了mysql容器中的/var/lib/mysql,而数据库mysql中user表有记录用户密码等信息,覆盖了我在docker-compose.yml中mysql容器上的环境配置所设置的密码
解决方案:进入mysql容器,登录mysql,数据库里手动修改用户密码
ps:由于我是修改别人的数据库后出现问题,所以我知道原始密码

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

结果:问题仍然未解决。。。

猜想2:我在数据库里修改用户密码时,没改对,改的时候是对用户root@localhost所做的更改,而另一个微服务ip地址压根就不是mysql容器的ip地址

:在微服务中远程登录mysql需要进行各种校验,而这些校验发生在mysql的连接层
解决:对mysql中用户root@%(这里的的%是指允许所有远程主机访问)修改密码,修改为root
结果:微服务正常访问mysql!!!!!!!!!!!!!

### 如何使用 Docker 部署微服务 #### 什么是 Docker 及其在微服务中的作用 Docker 是一种容器化技术,允许开发者将应用程序及其依赖项打包到一个可移植的容器中运行。它简化了应用的一致性和跨平台部署过程。对于微服务架构而言,Docker 提供了一种高效的方式将每个微服务封装为独立单元,在同环境中保持一致性[^1]。 #### 使用 DockerDocker Compose 的优势 Docker 仅能够单独运行单个微服务实例,还支持通过 Docker Compose 定义和管理多个相互关联的服务。这使得复杂的应用程序更容易被拆分为小型、自治的部分并协同工作。例如,可以通过 `docker-compose.yml` 文件描述各个服务间的网络配置以及数据卷挂载设置等细节[^2]。 #### 实际操作步骤概述 为了实现基于 Docker 技术下的微服务部署方案,通常需要完成以下几个方面的工作: ##### 编写 Dockerfile 来定义镜像 每项具体功能都应对应有一个专属目录结构,并在此基础上创建相应的 **Dockerfile** 文本文件用于指示如何构建该特定项目的映像版本号标记等内容。 ```dockerfile # Use an official Python runtime as a parent image FROM python:3.9-slim # Set the working directory in the container WORKDIR /app # Copy the current directory contents into the container at /app COPY . /app # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt # Make port available to outside world EXPOSE 8000 # Define environment variable ENV NAME World # Run app.py when the container launches CMD ["python", "app.py"] ``` ##### 创建 docker-compose.yml 文件来组合多项服务 此 YAML 格式的文档用来声明所有必要的组件和服务间的关系链路信息等等参数选项设定情况如下所示: ```yaml version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" ``` 在这个例子当中我们有两个部分组成整个系统:一个是名为 “web” 的前端展示层;另一个则是后台缓存数据库 Redis 。两者之间存在直接联系但却共同构成了完整的业务逻辑流程图谱。 #### 推送至远程仓库以便于分发实施阶段 当本地测试无误之后就可以考虑把制作好的镜像上传分享出去让更多的人受益或者是在生产环境下投入使用啦!命令形式非常简单明了只需执行下面这一句即可搞定推送动作哦~ ```bash docker push my-microservice:v1 ``` --- ### 总结 综上所述可以看出利用好 Docker 这样强大的工具确实可以让我们的日常工作变得更加便捷省心少呢~无论是从零开始搭建全新的项目还是维护现有的大型工程体系都能够游刃有余地应对各种挑战难题[^1][^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值