使用外部卷创建容器后,Permission将变为1000。
drwxr-x --- 7 1000 1000 4096 Mar 02 01:13 my_domain
每次我需要更改我的用户。 AS docker由root用户安装。我该如何避免这种情况?有人可以写点东西吗?
使用docker主机卷,您将看到用于在主机上读取和写入文件的容器内的用户的UID,容器和主机之间没有UID / GID的转换(这不是linux绑定挂载的功能)。有各种解决方法,包括:
-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身份运行入口点。命名卷通过从映像内容初始化目录(包括权限和文件所有者)来避免此问题。
不要将其更改为具有不同UID
的用户。启动时,容器本身可能会更改权限。在这种情况下,您可能需要查看您正在使用的泊坞窗图像。
所以我们以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
的用户和一个具有相同名称的组,由于使用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)