# Dockerfile for mall-admin built from source using a multi-stage build # Build stage: use Maven to compile mall-admin module (and its multi-module dependencies if needed) FROM maven:3.6.3-jdk-8 AS build WORKDIR /build # Copy the entire repository to the build context COPY . . # Build the mall-admin module, skipping tests for faster image build RUN mvn -f mall-admin/pom.xml -DskipTests package # Runtime stage: use a slim OpenJDK 8 runtime based on Alpine as per blueprint FROM openjdk:8u111-jre-alpine VOLUME /tmp # Copy the produced jar from the build stage COPY --from=build /build/mall-admin/target/mall-admin-1.0-SNAPSHOT.jar /mall-admin-1.0-SNAPSHOT.jar # Expose the application port EXPOSE 8080 # Run the application ENTRYPOINT ["java","-jar","/mall-admin-1.0-SNAPSHOT.jar"]
# Ignore git and build-related files .git/ .gitignore target/ **/target/ out/ .gradle/ .gradle/ node_modules/ .idea/ *.log *.tmp .DS_Store
Error summary
- Exact error message and exit code:
- The failing build ends with:
- [ERROR] Failed to execute goal on project mall-admin: Could not resolve dependencies for project com.macro.mall:mall-admin:jar:1.0-SNAPSHOT: The following artifacts could not be resolved: com.macro.mall:mall-mbg:jar:1.0-SNAPSHOT, com.macro.mall:mall-security:jar:1.0-SNAPSHOT: Could not find artifact com.macro.mall:mall-mbg:jar:1.0-SNAPSHOT in aliyunmaven (https://maven.aliyun.com/repository/public) -> [Help 1]
- Exit code: 1
- Failing command/step:
- RUN mvn -f mall-admin/pom.xml -DskipTests package
- Dockerfile: 9
- Missing packages or files mentioned:
- com.macro.mall:mall-mbg:jar:1.0-SNAPSHOT
- com.macro.mall:mall-security:jar:1.0-SNAPSHOT
- Note: POMs indicating missing artifacts were observed (mall-mbg-1.0-SNAPSHOT.pom, mall-security-1.0-SNAPSHOT.pom)
- Version mismatch information:
- Artifacts are SNAPSHOT versions: 1.0-SNAPSHOT
- The error indicates the SNAPSHOT artifacts are not available in the aliyunmaven repository (could not find artifact ...:jar:1.0-SNAPSHOT)
- Also: The log shows POMs for these SNAPSHOTs were attempted but reported as missing
Actionable observations
- The build failed due to unresolved dependencies for SNAPSHOT artifacts mall-mbg and mall-security.
- The required artifacts are not found in the maven.aliyun.com repository (aliyunmaven).
- Potential fixes:
- Publish/install mall-mbg and mall-security 1.0-SNAPSHOT to the repository being used, or switch to a repository that hosts these artifacts.
- Ensure the modules mall-mbg and mall-security are built and installed in the local/remote repo before building mall-admin.
- If SNAPSHOTs are not intended, update pom.xml to point to released versions or to a repository that contains these artifacts.# Dockerfile for mall-admin built from source using a multi-stage build # Build stage: use Maven to compile the entire project (monorepo) FROM maven:3.6.3-jdk-8 AS build WORKDIR /build # Copy the entire repository to the build context COPY . . # Build the entire multi-module project, skipping tests for faster image build RUN mvn -DskipTests package # Runtime stage: use a slim OpenJDK 8 runtime based on Alpine as per blueprint FROM openjdk:8u111-jre-alpine VOLUME /tmp # Copy the produced jar from the build stage COPY --from=build /build/mall-admin/target/mall-admin-1.0-SNAPSHOT.jar /mall-admin-1.0-SNAPSHOT.jar # Expose the application port EXPOSE 8080 # Run the application ENTRYPOINT ["java","-jar","/mall-admin-1.0-SNAPSHOT.jar"]
Actionable issues
- Maven -DskipTests used; tests skipped. Enable tests (at least in CI) to validate the artifact.
- Runtime base image openjdk:8u111-jre-alpine is old. Update to a newer Java base (prefer a supported LTS like 11/17+).
Build details
- Docker build flow
- Stage-1: FROM openjdk:8u111-jre-alpine (sha256:6a8cbe...); status: CACHED
- Build image: FROM maven:3.6.3-jdk-8 (sha256:ac624d...); status: DONE
- WORKDIR /build
- COPY . .
- RUN mvn -DskipTests package
- Maven activity during build
- [INFO] Scanning for projects...
- Downloading from maven.aliyun.com:
- spring-boot-starter-parent-2.7.5.pom
- spring-boot-dependencies-2.7.5.pom
- POMs indicate Spring Boot 2.7.5
- Context/files
- Dockerfile, .dockerignore
- Build context size: ~73.27 kB
- Base images: openjdk:8u111-jre-alpine and maven:3.6.3-jdk-8
Notes
- The log shows typical Docker/Maven pull-and-build steps with truncated output after initial downloads; the failure is reported at the top as build_failed. Consider updating base images and re-running with tests enabled.Actionable summary: Status - VerifyBuild status: build_failed Key concerns - Artifact path assumption: assumes mall-admin module outputs /build/mall-admin/target/mall-admin-1.0-SNAPSHOT.jar; in a monorepo, the actual Maven artifact path may differ. - Docker context: No .dockerignore shown; copying the entire repo can include unnecessary files; add a .dockerignore to speed up builds. - Base image/security: Using OpenJDK 8u111 JRE on Alpine may raise security/compliance concerns; consider a newer, still-compatible base image. Build details and relevant items - Build driver: docker - Dockerfile stages: - Stage-1 base: openjdk:8u111-jre-alpine@sha256:6a8cbe... (openjdk:8u111-jre-alpine) - Build image: maven:3.6.3-jdk-8@sha256:ac624d... (maven 3.6.3, JDK 8) - Working directory: /build - Commands: - RUN mvn -DskipTests package - Maven activity (partial, logs truncated): - [INFO] Scanning for projects... - Downloading dependencies from maven.aliyun.com - Artifacts referenced: spring-boot-starter-parent 2.7.5, spring-boot-dependencies 2.7.5 - POMs downloaded: spring-boot-starter-parent-2.7.5.pom, spring-boot-dependencies-2.7.5.pom - Note: The output shows dependency fetches; final error not shown in excerpt (truncated) - Artifact references observed in logs: - Expected artifact path: /build/mall-admin/target/mall-admin-1.0-SNAPSHOT.jar - Spring Boot dependencies: 2.7.5 Recommendation actions - Confirm actual Maven artifact path in the built module and ensure it matches the expected /build/mall-admin/target/mall-admin-1.0-SNAPSHOT.jar. - Add a .dockerignore to exclude unnecessary files from the build context. - Review base image choice (OpenJDK 8u111 on Alpine) for security/compliance; consider a newer compatible base if allowed.
Key actionable items and data: - Artifact expectation risk: The final COPY path assumes the mall-admin module produces a jar named mall-admin-1.0-SNAPSHOT.jar; if artifact name or path differs, the image build will fail. - Security concern: Running as root in the runtime image; consider creating and using a non-root user. - Context size risk: COPY . . in the build stage may copy unnecessary files; use .dockerignore to limit build context. Build details: - Build error context: #0 building with "default" instance using docker driver - Dockerfile steps (highlights): - Stage-1 base: openjdk:8u111-jre-alpine (sha256:6a8cbe...); FROM line shown - Build image: maven:3.6.3-jdk-8 (sha256:ac624d...) - Build steps: WORKDIR /build; COPY . .; RUN mvn -DskipTests package - Maven activity observed: - Command run: mvn -DskipTests package - Maven sources: Spring Boot 2.7.5 (pom downloads shown: spring-boot-starter-parent-2.7.5.pom, spring-boot-dependencies-2.7.5.pom) - Repro: Build context and docker layers loaded; logs show dependency fetches from aliyunmaven Artifacts and files: - Final artifact referenced in concern: mall-admin-1.0-SNAPSHOT.jar - Relevant package names: Spring Boot 2.7.5 components; Maven 3.6.3; OpenJDK 8u111 - Commands in play: RUN mvn -DskipTests package Notes: - The log excerpt ends with partial Maven dependency download; exact packaging error isn’t shown, but the overall status is build_failed.
- VerifyBuild status: build_failed - Concerns - Runtime stage uses openjdk:8u111-jre-alpine; security vulnerabilities risk; update to newer LTS if feasible. - COPY path /build/mall-admin/target/mall-admin-1.0-SNAPSHOT.jar assumes exact artifact output; if module names/versions change, the jar copy may fail. - -DskipTests is used; tests are skipped in CI; enable tests to catch regressions. - Build stack and commands - Stage-1 base image: openjdk:8u111-jre-alpine@sha256:6a8cbe4335d1a5711a52912b684e30d6dbfab681a6733440ff7241b05a5deefd - Stage-1 image status: CACHED - Build image: maven:3.6.3-jdk-8@sha256:ac624d39dd0b7bed827d4b0d1bbaeb457012e0cba0fb6c53ce34b00bed16ec08 - Build steps: WORKDIR /build; COPY . .; RUN mvn -DskipTests package - mvn command: mvn -DskipTests package - Maven activity (truncated in log) - Scanning for projects - Downloading from aliyunmaven: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starter-parent/2.7.5/spring-boot-starter-parent-2.7.5.pom - POM downloaded: spring-boot-starter-parent-2.7.5.pom (9.2 kB) - Repository: maven.aliyun.com/repository/public - Artifact references - JAR artifact path to copy: /build/mall-admin/target/mall-admin-1.0-SNAPSHOT.jar - Parent POM: org.springframework.boot:spring-boot-starter-parent:2.7.5 - Additional notes - If module names/versions differ, the COPY step may fail. - The log shows the build progressed through standard Maven dependency resolution, but the final result isn’t provided in the excerpt.
# Dockerfile for mall-admin built from source using a multi-stage build # Build stage: build necessary modules first, then the mall-admin module FROM maven:3.6.3-jdk-8 AS build WORKDIR /build # Copy the repository into the build context COPY . . # Build dependencies and modules in proper order to satisfy inter-module dependencies RUN mvn -f mall-mbg/pom.xml install -DskipTests RUN mvn -f mall-common/pom.xml install -DskipTests RUN mvn -f mall-security/pom.xml install -DskipTests RUN mvn -f mall-admin/pom.xml -DskipTests package # Runtime stage: use a slim OpenJDK 8 runtime based on Alpine as per blueprint FROM openjdk:8u111-jre-alpine VOLUME /tmp # Copy the produced jar from the build stage COPY --from=build /build/mall-admin/target/mall-admin-1.0-SNAPSHOT.jar /mall-admin-1.0-SNAPSHOT.jar # Expose the application port EXPOSE 8080 # Run the application ENTRYPOINT ["java","-jar","/mall-admin-1.0-SNAPSHOT.jar"]
Summary (under 1500 chars):
- Docker 镜像命令
- 搜索: docker search java
- 下载: docker pull java:8; docker pull macro/eureka-server:0.0.1
- 列出: docker images
- 删除: docker rmi java; docker rmi -f java; docker rmi -f $(docker images)
- Docker 容器命令
- 新建并启动: docker run -d -p 91:80 nginx
- 列出: docker ps
- 停止: docker stop $ContainerId
- 强制停止: docker kill $ContainerId
- 启动已停止: docker start $ContainerId
- 进入容器: docker inspect --format "{{.State.Pid}}" $ContainerId; nsenter --target "$pid" --mount --uts --ipc --net --pid
- 删除: docker rm $ContainerId; docker rm -f $(docker ps -a -q)
- 查看启动错误日志: docker logs $ContainerIdName(或者$ContainerId)
- 查看容器IP: docker inspect --format '{{ .NetworkSettings.IPAddress }}' $ContainerId
- 同步宿主机时间: docker cp /etc/localtime $ContainerName:/etc/
- 资源监控: docker stats $ContainerName; docker stats -a
- 进入 bash: docker exec -it $ContainerName /bin/bash
- Docker Registry
- 2.0 搭建: docker run -d -p 5000:5000 --restart=always --name registry2 registry:2
- 推送私有仓库: docker push localhost:5000/macro/eureka-server:0.0.1
- 修改镜像标签: docker tag macro/eureka-server:0.0.1 localhost:5000/macro/eureka-server:0.0.1
- 使用 Maven 构建 Docker 镜像
- 构建镜像: mvn clean package docker:build
- 远程 API(Linux 服务器): ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
- 推送镜像: mvn clean package docker:build -DpushImage
- 私有仓库镜像名: 192.168.1.71:5000/macro/${project.artifactId}:${project.version}
- 不安全注册中心: docker 要支持 http: echo '{ "insecure-registries":["39.98.190.128:5000"] }' > /etc/docker/daemon.json
- 修改 Docker 镜像存放位置
- 查看位置: docker info | grep "Docker Root Dir"(默认 /var/lib/docker)
- 停止: systemctl stop docker
- 移动: mv /var/lib/docker /root/data/docker
- 软连接: ln -s /root/data/docker /var/lib/docker
- Docker Compose
- 安装
- 下载地址: https://github.com/docker/compose/releases
- 安装路径: /usr/local/bin/docker-compose
- 设为可执行: sudo chmod +x /usr/local/bin/docker-compose
- 测试: docker-compose --version
- 命令补全工具: sudo curl -L https://raw.githubusercontent.com/docker/compose/1.22.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
- 常用命令: docker-compose up; docker-compose ps; docker-compose rm eureka; docker-compose scale eureka=3; docker-compose stop eureka; docker-compose start eureka
- 编排 SpringCloud 微服务
- 工程: eureka-server; hello-service; feign-consumer; api-gateway
- 编排模式:
1) 编排 SpringCloud 微服务: 见 eureka-server/docker-res/docker-compose.yml
2) 简化编排: 见 eureka-server/docker-res/docker-compose-simple.yml
3) 高可用注册中心: 见 eureka-server/docker-res/docker-compose-eureka.yml# Dockerfile for mall-admin built from source using a multi-stage build # Build stage: build necessary modules first, then the mall-admin module FROM maven:3.6.3-jdk-8 AS build WORKDIR /build # Copy the repository into the build context COPY . . # Build dependencies first to ensure SNAPSHOT artifacts are available in local repo RUN mvn -f mall-mbg/pom.xml install -DskipTests RUN mvn -f mall-security/pom.xml install -DskipTests # Then build mall-admin module RUN mvn -f mall-admin/pom.xml -DskipTests package # Runtime stage: use a slim OpenJDK 8 runtime based on Alpine as per blueprint FROM openjdk:8u111-jre-alpine VOLUME /tmp # Copy the produced jar from the build stage COPY --from=build /build/mall-admin/target/mall-admin-1.0-SNAPSHOT.jar /mall-admin-1.0-SNAPSHOT.jar # Expose the application port EXPOSE 8080 # Run the application ENTRYPOINT ["java","-jar","/mall-admin-1.0-SNAPSHOT.jar"]