java - 在Docker中构建Maven项目时,所有目标文件都是root的

标签 java maven docker

我有一个 Maven 项目,我想在 Docker 容器中构建它,这样我就不必在我的 Jenkins 系统上安装 Java、Maven 等。

我构建 Maven 项目如下:

docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock:ro
                    -v $(pwd):/opt/maven
                    -w /opt/maven
                    maven
                    mvn clean install

效果很好,构建正确。但是,当以我的普通用户身份执行此操作时,target/ 目录中的所有文件均由 root 所有,而不由 jester 所有,这是我的当前用户。

有没有简单的方法可以解决这个问题?

最佳答案

您可以查看选项 -u,如 in this gist ,它将 docker run 包装在脚本中:

#!/bin/sh

set -e
test ":$DEBUG" != :true || set -x

# set image
set -- debian:jessie "$@"

# use current user and its groups at host
for v in /etc/group /etc/passwd; do
  [ ! -r "$v" ] || set -- -v $v:$v:ro "$@"
done
set -- --user "`id -u`:`id -g`" "$@"
for g in `id -G`; do
  set -- --group-add "$g" "$@"
done
set -- -v "$HOME":"$HOME" "$@"

exec docker run --rm -it "$@"

目标是确保容器安装本地用户定义,并使用相同的 uid/gid。

关于java - 在Docker中构建Maven项目时,所有目标文件都是root的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47484175/

相关文章:

Maven 似乎正在拉入具有测试范围的 jar

java - 为什么Hamcrest `matches`方法使用Object作为输入类型而不使用泛型类型作为输入

java - @ManyToOne 与数据库中不存在子项的父项类型相同

java - 以特殊格式打印二维数组

docker - 有没有一种方法可以将文件存储在Docker主机上,而主机重启后该文件将继续存在?

docker - 根据容器id查找docker文件路径

docker - Traefik没有看到Docker Swarm服务

java - 使用 Java 通过 Apache Flink 减少 Pojo 字段

maven - -dmaven.multiModuleProjectDirectory系统属性未设置。检查$ M2_HOME环境变量和mvn脚本是否匹配

java - Maven 无法执行 objective-c om.jayway.maven.plugins.android. Generation2