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

时间:2019-03-15 11:07:43

标签: docker weblogic12c docker-container

使用外部卷创建容器后,权限变为1000。

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

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

2 个答案:

答案 0 :(得分:0)

请勿将其更改为其他UID用户。启动容器时,其权限可能会被容器本身更改。在这种情况下,您可能需要查看正在使用的Docker映像。

因此,以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而具有相同的名称,并且由于使用{{1}而使UID / GID为1000 }

-u

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

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

答案 1 :(得分:0)

对于docker主机卷,您将在用于在主机上读写文件的容器内看到用户的UID,容器与主机之间没有UID / GID的转换(这不是linux bind的功能)坐骑)。有多种解决方法,包括:

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

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

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