[problem help] docker挂载目录,用户归属异常
Tofloor
poster avatar
geebytes
deepin
2023-09-27 21:42
Author

问题:

我使用如下的配置挂载了docker 容器内部的目录到主机目录

    volumes:
      - '/data/work/gitlab/config:/etc/gitlab'
      - '/data/work/gitlab/logs:/var/log/gitlab'
      - '/data/work/gitlab/data:/var/opt/gitlab'
      - '/data/work/gitlab/data/.ssh:/var/opt/gitlab/.ssh'

但不知道为什么主机目录的的归属用户分别是 dde-dconfig-daemondeepin-anything

截图如下

image.png

Reply Favorite View the author
All Replies
LinuxLibs
deepin
2023-09-28 16:42
#1

你的这个配置是映射 主机的/data/... 目录到 容器的/etc/gitlab/等目录,应该是这个意思吗?

volumes:
  - '/data/work/gitlab/config:/etc/gitlab'
  - '/data/work/gitlab/logs:/var/log/gitlab'
  - '/data/work/gitlab/data:/var/opt/gitlab'
  - '/data/work/gitlab/data/.ssh:/var/opt/gitlab/.ssh'

ls显示的的 归属用户 是根据文件的 uid 得到的名称,不管在容器内还是在容器外。

docker run IMAGE_NAME 默认映射会以root用户的身份启动一个容器。

容器里面的/etc/passwd 里有容器的用户uid。根据文件的uid会得出容器内文件的user-name 和 group-name。

容器内外同一个文件的 uid值和gid值是一样的, 但显示的 name 不一样。因为内外算是两个不同的系统环境。

以你这里data目录下的 gitlab-kas 的归属用户、组 为例,可以在容器内和容器外分别用:ls -lht --numeric-uid-gid

命令查看文件的uid和gid是否一致。

Reply View the author
geebytes
deepin
2023-09-28 18:09
#2
LinuxLibs

你的这个配置是映射 主机的/data/... 目录到 容器的/etc/gitlab/等目录,应该是这个意思吗?

volumes:
  - '/data/work/gitlab/config:/etc/gitlab'
  - '/data/work/gitlab/logs:/var/log/gitlab'
  - '/data/work/gitlab/data:/var/opt/gitlab'
  - '/data/work/gitlab/data/.ssh:/var/opt/gitlab/.ssh'

ls显示的的 归属用户 是根据文件的 uid 得到的名称,不管在容器内还是在容器外。

docker run IMAGE_NAME 默认映射会以root用户的身份启动一个容器。

容器里面的/etc/passwd 里有容器的用户uid。根据文件的uid会得出容器内文件的user-name 和 group-name。

容器内外同一个文件的 uid值和gid值是一样的, 但显示的 name 不一样。因为内外算是两个不同的系统环境。

以你这里data目录下的 gitlab-kas 的归属用户、组 为例,可以在容器内和容器外分别用:ls -lht --numeric-uid-gid

命令查看文件的uid和gid是否一致。

谢谢回复,按照提供的思路现在可以可以这么理解,容器外挂载的文件和目录的uid和gid以容器内写文件的uid和gid的相同,并且现在容器内的gid和uid和宿主机的用户 dde-dconfig-daemon,deepin-anything 相同,最终导致了现在的问题。

Reply View the author
LinuxLibs
deepin
2023-09-28 20:03
#3

是的。你可以查下容器内外系统的 uid和gid对应的用户名和组名 分别是什么?

Reply View the author