我有一个 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/