看起来 Ubuntu 24.04 的官方 docker 镜像附带了一个名为 的用户ubuntu
。虽然用户名在很大程度上是无关紧要的,1000
但考虑到与 22.04 相比,该默认用户的 UID/GID 的选择有点破坏性。例如:
--- jammy
+++ noble
@@ -1,4 +1,4 @@
-$ docker run -it --rm ubuntu:22.04 cat /etc/passwd
+$ docker run -it --rm ubuntu:24.04 cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
@@ -15,6 +15,6 @@
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
-gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
+_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
-_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
+ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
例如,我知道很多与 docker 相关的工具,例如 CLI devcontainer
,尝试自动重新映射容器用户的 UID/GID 以匹配主机用户的 UID/GID,从而简化通过容器和主机共享文件时绑定挂载的权限卷。但是,大多数开发人员已经将其用户帐户设置为 UID/GUI 1000
,因为这是创建初始主机帐户时的默认设置。因此,这些工具可能会奇怪地无法在容器启动期间正确重新映射 UID/GID,当工具在没有更改任何 docker 容器运行参数的情况下重新启动时,开发人员会感到困惑。
dever
目前,我为任何工具创建一个伪帐户,以通过配置文件中的devcontainer
参数锁定并重新映射 UID/GID 。"remoteUser": "dever",
devcontainer.json
FROM base as dever
# add default user for devcontainer
RUN useradd \
--create-home \
--gid root \
--groups sudo \
--no-log-init \
--shell /bin/bash \
--system \
dever && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
考虑到现在只有一些 ubuntu 镜像附带了一个ubuntu
占据 UID/GID 的用户1000
,那么在创建一个不可知的 Dockerfile 来在启动时重新映射任何普通用户 UID/GID 时,其他人会推荐哪些替代方法?我现在必须始终只检查现有的 UID 才能1000
在 ubuntu 基础映像版本中通用吗?
这似乎是一个有意识的决定,旨在标准化非root“ubuntu”用户的使用。可以在这里找到信息丰富的错误报告:https://bugs.launchpad.net/cloud-images/+bug/2005129
如果链接消失,以下是相关引用:
所有功劳都应归于该错误报告的作者。希望能帮助到你!