使用docker部署springboot-vue项目踩坑总结

本文详细描述了一个使用Docker进行部署的应用架构,包括Java应用、Nginx反向代理、MySQL和Redis的配置,以及如何正确使用docker-compose和Dockerfile。特别强调了配置文件挂载和网络链接的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 我的目录结构:
.
└── docker
    ├── big-event
    │   ├── docker-compose.yml
    │   ├── java
    │   │   ├── app.jar
    │   │   ├── application.yml
    │   │   ├── Dockerfile
    │   │   └── logs
    │   └── nginx
    │       ├── conf
    │       │   └── default.conf
    │       └── html
    └── server
        ├── mysql
        │   ├── conf
        │   │   ├── docker.cnf
        │   │   └── mysql.cnf
        │   ├── data
        │   └── init.sql
        └── redis
            ├── conf
            │   └── redis.conf
            └── data
  1. java的Dockerfile
FROM openjdk:8-jre
WORKDIR /app
RUN mkdir logs
VOLUME ["/app/logs","/app/application.yml"]
COPY app.jar /app/
ENTRYPOINT ["java","-jar","app.jar"]
  1. docker-compose.yml
version: "3.0"
# 定义服务
services:

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - "/opt/docker/big-event/nginx/conf:/etc/nginx/conf.d"
      - "/opt/docker/big-event/nginx/html:/usr/share/nginx/html"
    networks:
      - net
    privileged: true
    links:
      - app

  mysql:
    image: mysql:latest
    ports:
      - "3306:3306"
    # 添加环境变量
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - "/opt/docker/server/mysql/data:/var/lib/mysql"
      - "/opt/docker/server/mysql/conf:/etc/mysql/conf.d/"
      - "/opt/docker/server/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql"
    networks:
      - net
    privileged: true

  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - "/opt/docker/server/redis/data:/data"
      - "/opt/docker/server/redis/conf/redis.conf:/etc/redis/redis.conf"
    command: redis-server /etc/redis/redis.conf
    networks:
      - net
    privileged: true

  app:
    # 构建镜像
    build:
      # 指定Dockerfile的目录
      context: ./java/
      # Dockerfile的文件名
      dockerfile: Dockerfile
    # 构建后的镜像名称
    image: app:1.0
    ports:
      - "8080:8080"
    volumes:
      - "/opt/docker/big-event/java/logs:/app/logs"
      - "/opt/docker/big-event/java/application.yml:/app/application.yml"
    networks:
      - net
    # 防止打开文件没有权限
    privileged: true
    links:
      - mysql
      - redis
    depends_on:
      - mysql

networks:
  net:
  1. 在 java -jar app.jar 的时候必须要 cd 到jar包所在的目录,不然挂载的配置文件application.yml就会失效(Dockerfile文件中设置)重要!重要!重要!
    错误示例:java -jar /app/app.jar 这样执行jar包,外挂的配置文件就不会生效。
  2. 如果在同一个桥接网络下,在java中可以通过服务名访问到相应的服务。
  3. 在 前端项目中,不能通过服务名访问后端的接口(要写ip或域名)。
  4. 启动 java项目时,要确保 你要连接的数据库是存在的。可以将init.sql 挂载到mysql容器,如果第一次挂载的数据卷中没有data数据就会执行初始化sql脚本,否则就不会执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值