Dockerfile
Dockerfile 中可以切换用户:
USER root
USER 1000
用户权限
当挂载到 docker 中时,经常碰到权限问题,原因可能是:
用户 id 不匹配导致的权限问题。
组 id 不匹配导致的权限问题。
第一种常出现于 docker 中的进程不是以 root 的权限运行的,而默认创建的用户 id 为 1000,如果宿主机 id 为 1000 的用户对挂载的文件没有访问权限,则用户没有访问权限。
第二种出现于在 Dockerfile 中添加了用户到组中,但是依然没有访问权限。进入 docker 中查看发现文件用户组是一个数字,说明用户组 id 和宿主机组 id 不同。这种情况下可以在 Dockerfile 中修改组 id:
+
run groupmod -g 112 docker
run gpasswd -a jenkins docker
挂载权限
对于 docker 而言,被挂载卷在容器内外的权限是相同的。而 podman 则不然。被挂载卷在容器中会被重置为 root:root。为了避免这种问题,可以在 podman run 中添加 --userns=keep-id
参数。
对于 podman-compose 而言,可以在 docker-compose 中添加:
userns_mode: keep-id
另一种方式是通过环境变量的方式:
但是这种方式对 postgresql 不友好,无法一起工作。 |