在创建卷的Docker容器之后,本地主机上的权限更改为1000

问题描述 投票:0回答:2

使用外部卷创建容器后,Permission将变为1000。

drwxr-x --- 7 1000 1000 4096 Mar 02 01:13 my_domain

每次我需要更改我的用户。 AS docker由root用户安装。我该如何避免这种情况?有人可以写点东西吗?

docker weblogic12c docker-container
2个回答
0
投票

使用docker主机卷,您将看到用于在主机上读取和写入文件的容器内的用户的UID,容器和主机之间没有UID / GID的转换(这不是linux绑定挂载的功能)。有各种解决方法,包括:

  • 只是让容器将文件写为不同的uid / gid。这可以允许主机上的随机用户访问容器数据,如果主机目录没有容器用户的写访问权,则可能导致写入错误。
  • 更改在图像内创建的用户的uid。这会导致您希望使用主机挂载运行的每个主机具有不同的映像。
  • 在运行时使用-u标志更改uid到docker run。这可能导致图像内的文件无法访问,并且容器内的uid与容器内的/ etc / passwd文件不匹配。

我个人的解决方案是使用以root身份启动的入口点动态修改容器内的用户,并将容器用户的uid与卷装入的uid进行比较。当它们不同时,我修改容器中用户的uid,并从图像中递归地修复仍属于旧uid的所有文件。这个例程的关键部分是我的基本映像仓库中的fix-perms脚本。您可以在此处看到此示例以及如何修改现有图像以使用它:https://github.com/sudo-bmitch/docker-base/(fix-perms位于bin / fix-perms)。

请注意,在生产中,我通常不使用主机卷运行,我跳过以root身份运行入口点。命名卷通过从映像内容初始化目录(包括权限和文件所有者)来避免此问题。


0
投票

不要将其更改为具有不同UID的用户。启动时,容器本身可能会更改权限。在这种情况下,您可能需要查看您正在使用的泊坞窗图像。

所以我们以mysql-docker为例。当你启动它时,权限will be changed即使对于已安装的卷也能正常工作,否则你将面临权限问题,因为mysql用户无法写入任何数据。

基于你的问题中的weblogic12c标签,我注意到weblogic的Dockerfile中的以下内容:

RUN  chown oracle:oracle -R /u01

如果您的数据保存在同一目录中的容器内,那么1000可能代表容器内的oracle用户,您也可以检查容器内的/etc/passwd

所以UIDGID在你的情况下是1000表示容器内容正在被容器进程使用,并且因为你没有用户匹配这个UID它会以你看到的数字方式出现。如果需要,您可以在主机上创建具有相同UID的用户。因此,为了给1000一个用户名和组名,您需要执行以下操作:

useradd -U -u 1000 oracle

由于使用oracle,上面的命令将创建一个名为-U的用户和一个具有相同名称的组,由于使用1000,UID / GID将是-u

  -u, --uid UID                 user ID of the new account
  -U, --user-group              create a group with the same name as the user

接下来,如果您在主机上执行了以下命令,您将得到一个结果,告诉您用户组和uid / gid:

id oracle
uid=1000(oracle) gid=1000(oracle) groups=1000(oracle)
© www.soinside.com 2019 - 2024. All rights reserved.