【问题标题】:How to run docker with current host user, when users are managed with Linux NIS (Network Information Service)当使用 Linux NIS(网络信息服务)管理用户时,如何使用当前主机用户运行 docker
【发布时间】:2021-04-19 11:08:07
【问题描述】:

我想用我的主机帐户运行 docker,

通常我会这样做:

#!/bin/bash
user_home="${HOME:-"$(eval echo "~$(whoami)")"}"

docker run -it --rm \
  --env "USER=$(whoami)" \
  -u $(id -u ${USER}):$(id -g ${USER}) \
  --volume "${user_home}:${user_home}":ro \
  --volume /etc/passwd:/etc/passwd:ro \
  --volume /etc/group:/etc/group:ro \
  "ubuntu" /bin/bash

但现在我需要在使用 NIS(网络信息服务)管理用户的 PC 上进行 我的用户不在 /etc/passwd 中

最好的方向是什么? 是否以某种方式将用户从 NIS 导出到某个文件并将其映射到 /etc/passwd?

【问题讨论】:

  • 如果您需要主机文件和主机用户,像 Docker 这样的隔离环境可能不适合您。直接在主机上运行该过程,您无需执行任何特殊操作。

标签: linux docker ubuntu nis


【解决方案1】:

由于您是通过脚本运行 Docker,因此您可以添加一些自动化来将必要的信息提取到临时文件中。像这样的:

getent passwd $(id -un) > /tmp/passwd.docker
getent group  $(id -gn) > /tmp/group.docker

getent 命令在系统上配置的任何目录源中查找信息,因此它将从 NIS 中提取信息。

然后您可以将/tmp/passwd.docker/tmp/group.docker 挂载到您的容器中。

或者,您可以只生成您需要的信息,因为您真正关心的是 uid 和用户名:

cat > /tmp/docker.passwd <<EOF
$LOGNAME:x:$(id -u):$(id -g):fake entry:$HOME:/bin/bash
EOF

等等

【讨论】:

  • 这行得通,谢谢 --volume /tmp/passwd.docker:/etc/passwd:ro --volume /tmp/group.docker:/etc/group:ro
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 2015-06-10
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
相关资源
最近更新 更多