使用外部卷创建容器后,权限变为1000。
drwxr-x --- 7 1000 1000 4096 Mar 02 01:13 my_domain
每次我都需要更改它的用户。 AS docker由root用户安装。 我如何避免这种情况? 有人可以写点什么吗?
答案 0 :(得分:0)
请勿将其更改为其他UID
用户。启动容器时,其权限可能会被容器本身更改。在这种情况下,您可能需要查看正在使用的Docker映像。
因此,以mysql-docker为例。启动时,即使已装入的卷也要具有权限will be changed才能正常工作,否则将因为mysql
用户无法写入任何数据而面临权限问题。
基于您问题中的weblogic12c
标记,我在weblogic的Dockerfile中注意到以下内容:
RUN chown oracle:oracle -R /u01
如果您的数据保存在同一目录内的容器内,则可能1000
代表容器内的oracle
用户,您也可以在容器内检查/etc/passwd
。
因此,在您的情况下,UID
和GID
代表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的功能)坐骑)。有多种解决方法,包括:
-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用户身份运行入口点。命名卷通过从映像内容(包括权限和文件所有者)初始化目录来避免此问题。