我有一本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。
答案 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=
结果)