Docker Compose部署多项目报错:路径./springboot未找到
问题分析与解决方案
1. 核心错误:springboot路径不存在
错误提示unable to prepare context: path "./springboot" not found,解决步骤:
- 检查项目目录结构,确保
docker-compose.yml同级目录下存在springboot文件夹,用ls -l命令可直接查看 - 若实际路径不符,修改
springboot服务的context参数,比如实际路径是./backend/springboot,则改为context: ./backend/springboot - Linux下可执行
chmod -R 755 ./springboot,确保目录具备可读权限
2. Angular服务的问题
配置中有两处明显问题:
depends_on: - app:不存在名为app的服务,若Angular需调用SpringBoot接口,应改为depends_on: - springbootbuild: angular:需确保同级目录下有angular文件夹,且内部包含Dockerfile。生产环境不建议用ng serve直接运行,推荐构建静态文件后用Nginx托管,示例Dockerfile:
# Angular构建镜像示例 FROM node:18-alpine as build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build --prod FROM nginx:alpine COPY --from=build /app/dist/你的Angular项目名 /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
3. SpringBoot服务的优化与修正
command: mvn clean spring-boot:run -dspring-boot.run.profiles=docker:直接在容器内运行Maven命令依赖本地缓存,建议先构建Jar包再制作镜像,示例Dockerfile:
# SpringBoot构建镜像示例 FROM maven:3.8.6-openjdk-11 as build WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests FROM openjdk:11-jre-slim WORKDIR /app COPY --from=build /app/target/*.jar app.jar EXPOSE 8080 CMD ["java", "-jar", "app.jar", "--spring.profiles.active=docker"]
depends_on: - nginx:SpringBoot无需依赖Nginx,通常是Nginx反向代理SpringBoot,可删除该依赖项- 检查
dockerfile: .docker/app/dockerfile路径,确保springboot目录下确实存在该文件
4. 修正后的docker-compose.yml示例
version: "3" services: nginx: container_name: nginx image: nginx:1.13 restart: always ports: - 80:80 - 443:443 volumes: - ./nginx/conf.d:/etc/nginx/conf.d # 若用Nginx托管Angular静态文件,添加此行 # - ./angular/dist/你的项目名:/usr/share/nginx/html depends_on: - springboot angular: container_name: angular restart: always build: ./angular depends_on: - springboot # 仅开发环境用ng serve时需要端口映射,生产环境可删除 ports: - "4200:4200" mysql: container_name: mysql image: mysql/mysql-server:5.7 environment: MYSQL_DATABASE: test MYSQL_ROOT_PASSWORD: formation123 MYSQL_ROOT_HOST: '%' ports: - 3306:3306 restart: always # 添加数据卷持久化,避免容器删除丢失数据 volumes: - mysql-data:/var/lib/mysql springboot: container_name: springboot restart: always build: context: ./springboot dockerfile: .docker/app/dockerfile expose: - "8080" depends_on: - mysql # 定义MySQL数据持久化卷 volumes: mysql-data:
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

