我正在使用 Ansible 和 Docker 设置服务器。我目前正在学习这两种技术,所以如果我在这里过于愚蠢,请容忍我。
为了运行运行 Docker 命令,用户必须在 docker 用户组中。所以我这样做:
- name: Ensure group "docker" exists
become: yes
group:
name: docker
state: present
- name: Add ansible user to docker group
become: yes
user:
name: "{{ansible_user}}"
groups: docker
append: yes
Run Code Online (Sandbox Code Playgroud)
在后来的剧本(但相同的剧本)中,我将执行以下操作:
- name: build
command: docker-compose build --pull
args:
chdir: /docker
- name: start services
command: docker-compose -f docker-compose.yml up -d
args:
chdir: /docker
Run Code Online (Sandbox Code Playgroud)
这在第一次运行时永远不起作用。“构建”任务总是失败,抱怨它找不到 docker(这是由于缺少访问权限)。如果我手动登录,因为{{ansible_user}}
我可以很好地运行 docker,并且如果我等待足够长的时间(以便 Ansible 将打开一个新的 SSH 会话,我认为)剧本也可以正常工作,这让我相信{{ansible_user}}
没有由于 Ansible 将 SSH 会话重新用于剧本中的所有任务,因此选择了新组。
所以我该怎么做?我也试过 …