我正在全新的 Oracle Linux 8 系统上运行 Ansible 剧本。它包括一个步骤,要求 systemctl 激活用户 Podman 套接字,如下所示:
- name: Enable podman socket
vars:
userid: ansible_facts.getent_passwd.{{ ansible_user_id }}[1]
ansible.builtin.systemd:
name: podman.socket
enabled: yes
state: started
scope: user
environment:
XDG_RUNTIME_DIR: "/run/user/{{ userid }}"
此 Ansible 剧本以用户(非 root)身份运行,以启用和启动用户级 Podman 套接字。
但是,运行剧本时出现了此错误:
致命:[127.0.0.1]:失败! => {“changed”: false,“cmd”: “/bin/systemctl --user”,“msg”: “无法连接到总线:没有此文件或目录”,“rc”: 1,“stderr”: “无法连接到总线:没有此文件或目录\n”,“stderr_lines”: [“无法连接到总线:没有此文件或目录”],“stdout”: “”,“stdout_lines”: []}
如果我不使用 Ansible,而是手动运行以下 systemctl 命令,则用户 Podman 套接字将成功激活:
systemctl --user enable podman.socket
我的剧本中缺少什么?我该如何修复?谢谢!
答案1
我遇到了类似的问题,我无法让 ansible 模块为非 root 用户启用和启动 podman.socket,但我可以systemctl --user enable podman.socket
在使用 ssh 以用户身份登录时运行命令()。
我收到的错误信息是:
致命:[x]:失败!=> {“changed”: false,“cmd”: “/usr/bin/systemctl --user”,“msg”: “无法连接到总线:操作不允许”,“rc”: 1,“stderr”: “无法连接到总线:操作不允许\n”,“stderr_lines”: [“无法连接到总线:操作不允许”],“stdout”: “”,“stdout_lines”: []}
我的解决方案是使用remote_user
而不是become
。我还将 添加DOCKER_HOST
到用户的 bashrc 中。
通过以下两个任务,我可以启用并启动 podman.socket rootless。
- name: Export podman.socket
become: '{{ user }}'
become: true
lineinfile:
dest: "/home/{{ user }}/.bashrc"
line: "export DOCKER_HOST=unix:$XDG_RUNTIME_DIR/podman/podman.sock"
insertafter: "EOF"
- name: Enable podman.socket for user
remote_user: '{{ user }}'
systemd:
name: "podman.socket"
enabled: yes
state: started
scope: user
这对于使 docker-compose 与 podman 和 ansible 协同工作很有帮助。