1.内容概要

主要是想要记录一下部署项目的流程,所以项目涉及内容比较简单,另外,因为初学遇到了很多问题,想记录一下关于mysql出现的问题

docker-compose的核心功能

  1. 统一配置与管理
    通过 docker-compose.yml 文件集中定义多个容器的参数(如镜像、端口映射、环境变量等),无需逐个手动启动容器,一键完成所有服务的创建、启动、停止等操作。

  2. 网络自动互联
    自动为容器创建独立的桥接网络,使同一项目的容器可通过服务名(而非 IP)直接通信,无需手动配置网络规则。

  3. 依赖关系处理
    支持通过 depends_on 定义容器启动顺序,确保依赖服务(如数据库)先于应用服务启动,避免运行错误。

  4. 数据持久化协调
    可统一配置数据卷(volumes),让多个容器共享或独立存储数据,并保证容器重启后数据不丢失。


2.流程

2.1  创建项目目录 mkdir -p 目录名

[root@xq101 ~]# mkdir docker_mysql
[root@xq101 ~]# cd docker_mysql/

2.2将项目打成jar包

2.3 用filezilla上传jar包到项目目录

2.3 编写docker-compose.yml文件

[root@xq101 docker_mysql]# vim docker-compose.yml

进入后按照自己的项目要求编写内容,注意一定要注意yml文件的格式,我写的时候内容正确,但不知道哪里缩进错了,也会报错

1)确保所有列表项(如 ports、volumes 等)使用相同的缩进(通常是2个空格)

2)每个连字符 - 后面应该有一个空格

下面是我写的,可以参考流程

关于depends_on一定要拉取相关镜像

version: "3"
services:
  microService:
    image: account_docker:1.1
    container_name: account
    ports:
      - "7001:7001"
    volumes:
      - /app/microService:/data
    networks:
      - myMode
    depends_on:
      - mysql

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'mydocker'
      MYSQL_USER: 'root'
      MYSQL_PASSWORD: '123456'
    ports:
      - "3307:3306"
    volumes:
      - /app/mysql/db:/var/lib/mysql
      - /app/mysql/conf/my.cnf:/etc/my.cnf
      - /app/mysql/init:/docker-entrypoint-initdb.d
    networks:
      - myMode
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

networks:
  myMode:

2.4 编写Dockerfile

[root@xq101 docker_mysql]# vim Dockerfile

我的内容

这里From后面的镜像为项目的基础镜像,在执行后面命令前一定要拉取这个基础镜像

这里的jdk17是因为的maven项目是基于jdk17的

# 基础镜像使用java
 FROM eclipse-temurin:17-jdk
 # 作者
MAINTAINER huan
 # VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器
的/tmp
 VOLUME /tmp
 # 将jar包添加到容器中并更名为docker_compose_t1-1.0-SNAPSHOT.jar
 ADD docker_compose_t1-1.0-SNAPSHOT.jar  account_docker.jar
 # 运行jar包
RUN bash -c 'touch /account_docker.jar'
 ENTRYPOINT ["java","-jar","/account_docker.jar"]
 #暴露7001端口作为微服务
EXPOSE 7001

以上流程执行完之后,应有如下目录

2.5 构建镜像 

执行docker build -t 镜像名称:版本 空格 .

docker build -t account_docker:1.1 .

2.6 启动docker-compose服务

[root@xq101 docker_mysql]# docker-compose up -d

启动成功应有

[root@xq101 docker_mysql]# docker ps
CONTAINER ID   IMAGE                COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
1ad65c8f4159   account_docker:1.1   "java -jar /account_…"   10 minutes ago   Up 10 minutes   0.0.0.0:7001->7001/tcp, :::7001->7001/tcp              account
591be67db0e6   mysql:5.7            "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   docker_mysql_mysql_1_538feea5fe8b

 查看服务访问的url:宿主机ip:暴露端口/项目指定服务路径

我的访问的路径如下

192.168.247.135:7001/account/findById?id=1


3.关于mysql的错误 

以下都是我犯的错,大家可以参考,若还有其他错误,恳请指正orz

我是启动项目后,到浏览器访问,才发现的错误

然后用docker logs 容器名(account)查找的错误

3.1端口占用

原因:我有其他的mysql容器实例是运行的,而且用了相同的宿主机端口映射3306

ERROR: for docker_mysql_mysql_1_891131b6ba00  Cannot start service mysql: driver failed programming external connectivity on endpoint docker_mysql_mysql_1_d99c30890b2b (1f8e4dcd6982f724a3c249b436f1db10e84e33b9229bf5d3560db7d758daa7c1): Bind for 0.0.0.0:3307 failed: port is already allocated
 

解决

 使用docker rm -f 对应容器名称

docker-compose down  清理之前的失败容器(如果存在)

docker-compose up -d  重新启动服务

3.2 mysql连接失败

主要原因就是连接数据库的url写错了

如果是按照2.2中配置写的话,不会有问题,那个是已经修正的

原因:我一开始写的项目在本地运行,就是用的宿主机的端口3307,但是打成jar包前应该改成mysql容器名:容器内端口号(也就是3307),我忘记了,所以这里就连接失败了 /(ㄒoㄒ)/~~

025-07-27 10:33:58.721 ERROR 1 --- [eate-1487230025] com.alibaba.druid.pool.DruidDataSource   : create connection SQLException, url: jdbc:mysql://mysql:3307/mydocker? useUnicode=true&characterEncoding=utf-8&useSSL=false, errorCode 0, state 08S01

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

解决

更改成正确的端口映射 ,再重新上传到项目目录

3.3 重复报错的url

按理讲,我改掉了项目的原内容,所以我重新打包并上传了,之后又重新执行了docker-compose up -d不会有问题啊

后面问了deepseek 说是未重新构建镜像未重启容器 

2025-07-27 10:34:53.296 ERROR 1 --- [eate-1487230025] com.alibaba.druid.pool.DruidDataSource   : create connection SQLException, url: jdbc:mysql://mysql:3307/mydocker? useUnicode=true&characterEncoding=utf-8&useSSL=false, errorCode 0, state 08S01

解决

先停掉docker-compose服务

删除Dockerfile生成的镜像,重新构建后,再次启动docker-compose服务


                                       道且长,

目录

1.内容概要

2.流程

2.1  创建项目目录 mkdir -p 目录名

2.2将项目打成jar包

2.3 用filezilla上传jar包到项目目录

2.3 编写docker-compose.yml文件

2.4 编写Dockerfile

2.5 构建镜像 

2.6 启动docker-compose服务

3.关于mysql的错误 

3.1端口占用

3.2 mysql连接失败

3.3 重复报错的url


不转弯,就为一片海,越万山

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐