1、application.yml 数据库配置(容器互联)

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://mysql:3306/campus_room?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  sql:
    init:
      mode: never
      schema-locations: classpath:schema.sql
      data-locations: classpath:data.sql
      encoding: UTF-8

  cache:
    type: simple
  autoconfigure:
    exclude:
      - org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
      - org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration
  jackson:
    time-zone: Asia/Shanghai
    serialization:
      WRITE_DATES_AS_TIMESTAMPS: false
    date-format: yyyy-MM-dd HH:mm:ss
    deserialization:
      ADJUST_DATES_TO_CONTEXT_TIME_ZONE: true
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: auto

jwt:
  secret: 4c2f7b3d1e5a9c8b4d6f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d
  expire-minutes: 120

logging:
  level:
    root: info
management:
  endpoints:
    web:
      exposure:
        include: health,info
  endpoint:
    health:
      show-details: when_authorized


 2、docker-compose.yml

version: '3.9'

networks:
  app_network:
    driver: bridge

volumes:
  mysql_data:

services:
  mysql:
    image: mysql:8.0
    container_name: project_mysql
    restart: always
    # 统一使用全局定义的app_network
    networks:
      - app_network
    # - 后加空格,修正volumes语法
    volumes:
      - mysql_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: campus_meeting
    ports:
      - "3306:3306"
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    command: --default-authentication-plugin=mysql_native_password
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  backend:
    # 移除build,使用你已构建好的镜像
    image: meeting-backend:1.0
    restart: always
    depends_on:
      - mysql
    networks:
      - app_network
    # 修正-. 缺少空格 → - ./
    volumes:
      - ./backend_logs:/app/logs
    environment:
      # 数据库host改为mysql容器名 project_mysql
      - SPRING_DATASOURCE_URL=jdbc:mysql://project_mysql:3306/campus_meeting?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=123456
    ports:
      - "8080:8080"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  frontend:
    # 移除build,使用你已构建好的前端镜像
    image: meeting-front:1.0
    container_name: project_frontend
    restart: always
    depends_on:
      - backend
    # 统一网络app_network
    networks:
      - app_network
    volumes:
      - ./nginx_logs:/var/log/nginx
    ports:
      - "80:80"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

3、backend/Dockerfile

#FROM openjdk:17-jdk-slim
FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
COPY meeting-backend-1.0.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

4、后端打包

5、构建后端镜像

# 进入后端源码目录
cd /mnt/d/campus-meeting/campus-meeting-platform_v2.0/backend
# 构建镜像
docker build -t meeting-backend:1.0 .

6、前端打包生成dist文件

# 安装依赖
npm install
# 生产打包,生成dist文件夹
npm run build

7、frontend/nginx.conf

server {
    listen 80;
    root /usr/share/nginx/html;
    index index.html;

    # Vue history模式刷新404处理
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 接口转发到compose后端服务名 backend
    location /api/ {
        proxy_pass http://backend:8080/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

8、frontend/Dockerfile

FROM nginx:alpine
COPY dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80

9、构建前端镜像

# 进入前端目录
cd /mnt/d/campus-meeting/campus-meeting-platform_v2.0/frontend
# 构建镜像
docker build -t meeting-front:1.0 .

10、拉取数据库镜像

docker pull mysql:8.0

11、查看镜像

docker images

12、后台启动所有容器

切换到项目根目录(必须先做),确认目录内存在 docker-compose.yml 文件,执行查看

docker compose up --build -d

13、查看容器运行清单

确认三个容器持续处于 Up 状态。

docker ps

14. 查看后端启动日志,确认数据库连接无报错

docker logs -f campus-meeting-platform_v20-backend-1

15、本地浏览器访问地址

http://localhost

更多推荐