
csanchez/maven所有镜像发布于 csanchez/maven,扩展自Docker官方镜像的版本同时发布于 maven。
查看Docker Hub maven 和 csanchez/maven 获取最新标签列表
csanchez/maven 仓库下查看Docker Hub csanchez/maven 获取最新标签列表
Apache Maven 是一款软件项目管理与理解工具。基于项目对象模型(POM)概念,Maven可从中央信息源管理项目的构建、报告和文档。
可直接使用Maven Docker镜像运行Maven项目,通过 docker run 传递Maven命令:
bashdocker run -it --rm --name my-maven-project -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven:3.3-jdk-8 mvn verify
powershelldocker run -it --rm --name my-maven-project -v "$(Get-Location)":C:/Src -w C:/Src csanchez/maven:3.3-jdk-8-windows mvn verify
powershelldocker run -it --rm --name my-maven-project -v "$(Get-Location)":C:/Src -w C:/Src maven:3.3-jdk-8-windows mvn clean install
此为基础镜像,包含最精简的必要依赖。若在 Dockerfile 中添加自定义包,可按以下方式构建本地镜像:
bashdocker build --tag my_local_maven:3.6.0-jdk-8 .
bashdocker build -f Dockerfile.windows --tag my_local_maven:3-jdk-9-windows --build-arg WINDOWS_DOCKER_TAG=1803 .
可使用Maven构建应用并通过多阶段构建将其打包到不含Maven的镜像中:
dockerfile# 构建阶段 FROM maven WORKDIR /usr/src/app COPY pom.xml . RUN mvn -B -e -C -T 1C org.apache.maven.plugins:maven-dependency-plugin:3.1.1:go-offline COPY . . RUN mvn -B -e -o -T 1C verify # 打包阶段(不含Maven) FROM openjdk COPY --from=0 /usr/src/app/target/*.jar ./
通过创建卷并挂载到 /root/.m2,可在容器间重用本地Maven仓库:
bashdocker volume create --name maven-repo docker run -it -v maven-repo:/root/.m2 maven mvn archetype:generate # 下载依赖 docker run -it -v maven-repo:/root/.m2 maven mvn archetype:generate # 重用已下载依赖
或直接使用主机的 .m2 缓存目录(如与IDE共享的目录):
bashdocker run -it --rm -v "$PWD":/usr/src/mymaven -v "$HOME/.m2":/root/.m2 -v "$PWD/target:/usr/src/mymaven/target" -w /usr/src/mymaven maven mvn package
$MAVEN_CONFIG 目录(默认 /root/.m2 或 C:\Users\ContainerUser\.m2)可配置为卷,故构建时复制的内容会丢失。为此提供 /usr/share/maven/ref/(或 C:\ProgramData\Maven\Reference)目录,容器启动时会将其内容复制到 $MAVEN_CONFIG。
要创建预打包仓库,需准备含所需依赖的 pom.xml 并在 Dockerfile 中使用:
bashCOPY pom.xml /tmp/pom.xml RUN mvn -B -f /tmp/pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve
添加自定义 settings.xml 到镜像:
bashCOPY settings.xml /usr/share/maven/ref/
示例可查看 tests 目录。
Maven需用户主目录存储依赖,若用户不存在需设置 user.home Java属性。例如,以用户 1000 运行并挂载主机Maven仓库:
bashdocker run -v ~/.m2:/var/maven/.m2 -ti --rm -u 1000 -e MAVEN_CONFIG=/var/maven/.m2 maven mvn -Duser.home=/var/maven archetype:generate
maven 镜像提供多种变体,适用于不同场景:
maven:<version>默认镜像,适用于临时容器(挂载源码运行)及作为基础镜像构建其他镜像,含最精简依赖。
bashdocker build -t maven .
测试使用 bats(Linux)和 pester(Windows,需Pester 4.x)编写,位于 tests 目录。通过环境变量 TAG 指定测试镜像:
bashTAG=jdk-11 bats tests
powershell$env:TAG="jdk-11" ; Invoke-Pester -Path tests
Linux:
bashfor dir in $(/bin/ls -1 -d */ | grep -v 'tests\|windows'); do TAG=$(basename $dir) bats tests; done
Windows:
powershellGet-ChildItem -Path windows\* -File -Include "Dockerfile.windows-*" | ForEach-Object { Push-Location ; $env:TAG=$_.Name.Replace('Dockerfile.windows-', '') ; Invoke-Pester -Path tests ; Pop-Location }
brew install bats 安装bashgit submodule init git submodule update
需向 docker-library/official-images 提交PR,通过 publish.sh 运行 generate-stackbrew-library.sh 实现。
查看镜像中软件的许可证信息。
通过 GitHub issue 提交问题,或在Freenode的 #docker-library IRC频道联系官方镜像维护者。
欢迎贡献功能、修复或更新。大型贡献建议先通过 GitHub issue 讨论,以确保方向正确并避免重复工作。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务