通过当前用户在Docker容器中运行Maven

时间:2018-10-12 13:40:54

标签: maven docker

我想运行Maven在Docker容器中构建项目。首先,我想到了:

docker run -it --rm
           -v $HOME/.m2:/root/.m2:rw
           -v $PWD:$PWD:rw
           -w $PWD
           maven:alpine
           mvn "$@"

这很好,但是这里的问题是所有文件现在都由root用户写入和拥有。我希望它们归当前用户本人所有。

所以我尝试了这个:

docker run -it --rm
           --user $(id -u):$(id -g)
           -v $HOME/.m2:/root/.m2:rw
           -v $PWD:$PWD:rw
           -w $PWD
           maven:alpine
           mvn "$@"

这没有按预期工作。我相信我知道为什么:现在有了--user $(id -u):$(id -g),我们确实可以像我一样执行任务,但是现在-v $HOME/.m2:/root/.m2:rw的映射变得不正确,不再有/root了。

所以我们尝试一下:

docker run -it --rm
           --user $(id -u):$(id -g)
           -v $HOME:$HOME:rw
           -v $PWD:$PWD:rw
           -w $PWD
           maven:alpine
           mvn "$@"

现在我收到以下警告:

Can not write to /root/.m2/copy_reference_file.log. Wrong volume permissions? Carrying on ...

此外,Maven似乎能够构建(尽管我在集成测试期间访问Docker守护程序时遇到问题,但这可能更适合另一个问题),但是我看不到{{ 1}}在主机上?它们也不在主机上的~/.m2/repository中(按预期不存在)。他们在哪?我在做什么错了?

1 个答案:

答案 0 :(得分:0)

Here介绍了如何以非root用户身份运行maven:

  

Maven需要用户home才能将工件下载到其中,如果图像中不存在该用户,则需要设置一个额外的user.home Java属性。

在该方向上应该起作用:

docker run -it --rm \
  --user $(id -u):$(id -g) \
  -v ~/.m2:/var/maven/.m2:rw \
  -e MAVEN_CONFIG=/var/maven/.m2 \
  -v $PWD:$PWD:rw \
  -w $PWD \
  maven:alpine \
  mvn -Duser.home=/var/maven "$@"