我正在使用Docker运行后台服务分析我的开发目录。我在我的容器上使用docker run -v /host/project:/media/analysis:rw
来运行它。
但是,这个命令导致一个问题,这个卷中的文件属于UID 1000(root),而我想用我的服务打开它。我正在使用chown user:user -R /media/analysis
但是这需要从docker容器运行命令,我想避免用户在运行容器后执行命令。
第二个问题是,即使我使用run
命令运行脚本,因为它是一个开发人员目录,肯定会添加新文件,我发现在主机上创建新文件被视为Docker的“root”文件意味着我还需要在服务处理时更新卷权限。
此致 沃尔多
更新:
我想到了解决问题的另一种方法,但是作为初学者,我想知道是否有正确的方法来做到这一点。
在我的Dockerfile上,我添加了一个ENTRYPOINT script.sh
,内容如下:
#!/bin/bash
olduser=$(id -u sonarqube)
oldgroup=$(id -g sonarqube)
usermod -u ${USER_ID} sonarqube \;
groupmod -g ${GROUP_ID} sonarqube ;
find / -group ${oldgroup} -exec chgrp -h sonarqube {} \;
find / -user ${olduser} -exec chown -h sonarqube {} \;
然后,我使用以下命令运行我的容器:
docker run -v /project:/analysis:rw -e USER_ID=$(id -u) GROUP_ID=$(id -g) image
答案 0 :(得分:-1)
您可以从Dockerfile设置拥有用户/组。
RUN mkdir -p /somedir && chown -R someone:someone /somedir
VOLUME ["/somedir"]
还有其他方法可以做到这一点,所以要阅读;)https://github.com/moby/moby/issues/2259