
저는 새로운 Oracle Linux 8 시스템에서 Ansible 플레이북을 실행하고 있습니다. 여기에는 다음과 같이 사용자 Podman 소켓을 활성화하도록 systemctl에 요청하는 단계가 포함됩니다.
- 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 플레이북은 사용자 수준 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
루트가 아닌 사용자에 대해 podman.socket을 활성화하고 시작하는 ansible 모듈을 얻을 수 없는 비슷한 문제가 발생했지만 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
. 또한 사용자의 bashrc에 become
추가했습니다 .DOCKER_HOST
다음 두 가지 작업을 통해 podman.socket을 루트 없이 활성화하고 시작할 수 있습니다.
- 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과 함께 작동하도록 하는 데 도움이 되었습니다.