我想运行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
中(按预期不存在)。他们在哪?我在做什么错了?
答案 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 "$@"