使用Ansible启动Docker守护进程

7

我正在编写ansible脚本来启动docker守护进程、docker容器和docker执行。在启动docker容器后,我需要在容器内启动一些服务。

我已经安装了docker引擎,并在远程机器上配置并使用了一些docker容器。我使用特定路径启动docker守护进程,因为我需要将我的卷和容器存储在该路径中。

 $docker daemon -g /test/docker

我的问题是通过ansible启动docker守护进程时,它已经启动了,但没有继续执行下一步操作。仍在运行docker守护进程。
  ---
  - hosts: webservers
    remote_user: root

   # Apache Subversion   dnf -y install python-pip

    tasks:

      - name: Start Docker Deamon
        shell: docker -d -g /test/docker 
        become: yes
        become_user: root

      - name: Start testing docker machine
        command: docker start testing
        async: True
        poll: 0

我遵循异步启动进程,但对我没有起作用,

建议在启动docker守护进程后,如何运行下一个进程。

2个回答

9

为了启动Docker守护进程,你需要使用Ansible的service模块

- name: Ensure docker deamon is running
  service:
    name: docker
    state: started
  become: true

任何Docker守护进程的自定义应该被放在/etc/docker/daemon.json中,正如官方文档所述。在您的情况下,文件应该是这样的:
{
   "graph": "/test/docker"
}

为了与容器交互,请使用ansible的docker_container模块:docker_container 模块
- name: Ensure My docker container is running
  docker_container:
    name: testing
    image: busybox
    state: started
  become: true

尽量避免使用Ansible的shell模块来执行任何操作,因为它可能会在之后引起麻烦。


我使用了服务模块来启动Docker守护进程,但有时,在此之后尝试运行“docker”命令时会出现错误。 "无法连接到http+docker://localhost上的Docker守护进程 - 它正在运行吗?\n\n如果它在非标准位置,请使用DOCKER_HOST环境变量指定URL。" - Muhammad Faizan-Ul-Haq
@MuhammadFaizan-Ul-Haq,请检查您的Docker配置和/或systemd单元文件。host存在错误配置。 - gbolo

2

当启动机器时,您还可以自动启动Docker和其他服务。为此,您可以像这样使用Ansible中的systemd模块:

- name: Enable docker.service
  systemd:
    name: docker.service
    daemon_reload: true
    enabled: true

- name: Enable containerd.service
  systemd:
    name: containerd.service
    daemon_reload: true
    enabled: true

Reference: here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接