主机和docker容器之间的卷和权限

主机和docker容器之间的卷和权限,docker,permissions,volumes,Docker,Permissions,Volumes,我正在尝试对主机上的所有服务进行dockerize。但是我在主机和Docker之间的Docker和卷权限方面遇到了以下问题 我有一台具有以下文件夹结构的主机: - /data/mysql (user: docker-mysql) - /data/gitlab (user: docker-gitlab) - /data/backup (user: share-backup) /data/mysql:/mnt/mysql文件夹正在装载到mysql docker容器中。docker mysql容器每

我正在尝试对主机上的所有服务进行dockerize。但是我在主机和Docker之间的Docker和卷权限方面遇到了以下问题

我有一台具有以下文件夹结构的主机:

- /data/mysql (user: docker-mysql)
- /data/gitlab (user: docker-gitlab)
- /data/backup (user: share-backup)
/data/mysql:/mnt/mysql
文件夹正在装载到mysql docker容器中。docker mysql容器每24小时创建一次备份,但由于docker容器在用户根上运行,因此这些备份在/data/mysql文件夹中创建为用户根和组根

我的目标是将/data/mysql文件夹中的文件创建为docker mysql用户,而不是根用户

我试图通过设置
运行groupadd-r docker-mysql&&useradd-r-g docker-mysql-docker-mysql-docker-mysql
用户docker-mysql
来将docker容器的用户更改为另一个用户,但是mysql容器甚至不会再启动,因为
docker-mysql
用户似乎没有根权限。我也在Gitlab CE docker映像上尝试了这一点,但遇到了与以不同用户身份运行Gitlab CE引发权限错误相同的问题


您知道如何使用正确的用户在主机上向例如
/data/mysql
写入文件吗?

尽管有mysql映像,但您需要的是:容器中的每个进程都必须作为非根用户执行。有一些解决方法,但我建议您首先深入到mysql基础映像中,看看引擎盖下发生了什么。一种方法是将每个进程重定向到非root用户。这可以通过以下方式实现:

在你的Dockerfile上

RUN groupadd -r docker-mysql && useradd -r -g docker-mysql docker-mysql

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["mysqld"] ##CHECK YOUR IMAGE FIRST
这两个可以翻译为

docker-entrypoint.sh mysqld
现在在docker-entrypoint.sh上,如果图像与本例不同,则需要修改该图像(它来自使用ubuntu作为操作系统基础图像的mongodb):

if[[“$originalArgOne”==mysql*]&&[“$(id-u)”='0'];然后
如果[“$originalArgOne”=“mysqld”];
然后是chown-R docker mysql
fi
#确保我们可以将stdout和stderr写为“mongodb”
#(有关稍后的“initdb”代码,请参阅下面的“-logpath”)
chown--取消对docker mysql的引用“/proc/$$/fd/1”“/proc/$$/fd/2”| |
exec gosu docker mysql“$BASH_SOURCE”“$@”
fi

这个答案是根据(很好的阅读)改编的。

您使用的是哪个mysql图像?
if [[ “$originalArgOne” == mysql* ]] && [ “$(id -u)” = ‘0’ ]; then
    if [ “$originalArgOne” = ‘mysqld’ ];
        then chown -R docker-mysql <MYSQL FOLDERS in CONTAINER>
    fi 
    # make sure we can write to stdout and stderr as “mongodb”
    # (for our “initdb” code later; see “ — logpath” below)
    chown --dereference docker-mysql “/proc/$$/fd/1” “/proc/$$/fd/2” || :
    exec gosu docker-mysql “$BASH_SOURCE” “$@”
fi