我喜欢Docker如何管理卷,端口和网络。
但是我发现Docker缺少一些可以正确管理用户的内容(因此具有文件/卷权限)。
用例:
”和GitlabCI,以用户
gitlab
的身份运行,我们使用gradle Docker映像来 构建应用程序”
({https://hub.docker.com/_/gradle/,可以正确声明用户gradle
)。
此图像将创建gradle
用户拥有的jar文件,因此用户gitlab
无法清除这些文件=>破坏GitlabCI。
如果我使用--user=$UID
运行Docker,文件就可以了,但是由于gitlab
在Docker gradle映像中不是有效用户,因此某些Java单元测试失败(Java安全性)。
我的解决方案是在Docker映像内创建用户:
#!/bin/sh
BUILD_CMD="gradle build"
set -eux
if test -n "$USER_UID" && test -n "$USER_NAME"; then
adduser --uid $USER_UID --quiet --home /home/gradle --disabled-password --gecos "djobi" $USER_NAME
exec su -c "$BUILD_CMD" $USER_NAME
else
exec $BUILD_CMD
fi
这工作正常,我想知道是否有更好的解决方案,更全局,可以影响docker-compose.yml的所有正在运行的容器?