
新しい 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 プレイブックは、ユーザーレベルの Podman ソケットを有効にして起動するために、ユーザー (root ではない) として実行されます。
しかし、プレイブックを実行すると次のエラーが発生しました:
fatal: [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
同様の問題に遭遇しました。非 root ユーザーに対して ansible モジュールを有効にして 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 に追加しました。
次の 2 つのタスクで、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 で動作させるために役立ちました。