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

另一种方式是通过环境变量的方式:

PODMAN_USERNS=keep-id podman-compose up -d --force-recreate

但是这种方式对 postgresql 不友好,无法一起工作。

Last moify: 2024-01-06 12:21:48
Build time:2025-07-18 09:41:42
Powered By asphinx