运行collect_facts:true失败,显示“找不到uid:1001”

时间:2019-09-30 12:07:55

标签: ansible

我有一本ansible-playbook,其collect_facts设置为true。但是它无法获取uid。这是我得到的错误:

TASK [Gathering Facts] **************************************************************************************************************************************************************
The full traceback is:
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 144, in run
    res = self._execute()
  File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 516, in _execute
    self._play_context = self._play_context.set_task_and_variable_override(task=self._task, variables=variables, templar=templar)
  File "/usr/lib/python2.7/site-packages/ansible/playbook/play_context.py", line 335, in set_task_and_variable_override
    new_info.remote_user = pwd.getpwuid(os.getuid()).pw_name
KeyError: 'getpwuid(): uid not found: 1001'

fatal: [localhost]: FAILED! => {
    "msg": "Unexpected failure during module execution.",
    "stdout": ""
}

现在,设置中存在1001 uid:

$ echo $UID
1001

我正在容器中运行它,这可能是个问题吗?任何帮助调试此问题的指针都值得赞赏。 TIA。

1 个答案:

答案 0 :(得分:1)

  

我正在容器中运行它,这可能是个问题吗?

虽然这不会自动使其成为问题,但它可能是相关的,因为您可以更轻松地将进程作为Docker容器内的任意UID执行。您通常不会在虚拟机上看到该问题,因为要在虚拟主机上运行任何内容,您首先必须先经过身份验证,这几乎总是涉及在/etc/passwd中查找各种用户信息。但是,容器通常没有“登录”过程,因为这只是Linux名称空间的骗局

您可以通过运行docker run --rm -u 12345 ubuntu:18.04 id -a并尝试观察uid=12345 gid=0(root) groups=0(root)来进行尝试,但是/etc/passwd中没有UID 12345的条目(请注意,之后缺少的(something) uid=结果)