用Ansible运行“docker volume create”?

我有一个Rails应用程序,我通过Ansible在Docker容器中进行部署。 我的应用程序目前包含三个容器:

  • Docker卷容器(使用docker volume create --name dbdata
  • Postgres容器(带有volumes_from dbdata)
  • Rails应用程序容器(链接到postgres容器)

我的部署剧本正在工作,但我不得不通过SSH在服务器上运行docker volume create命令。 我很想通过Ansible来做到这一点,所以我可以部署一个新的应用程序实例到一个空的容器。

有没有办法通过Ansible运行docker volume create ,还是有一些其他的方式来做到这一点? 我检查了Ansible Docker模块的文档,但看起来他们不支持volume create 。 除非我失去了一些东西?

这里有一个选项,使用command模块。

 - hosts: localhost tasks: - name: check if myvolume exists command: docker volume inspect myvolume register: myvolume_exists failed_when: false - name: create myvolume command: docker volume create --name myvolume when: myvolume_exists|failed 

我们首先使用docker volume inspect卷是否存在。 我们将该任务的结果保存在variablesmyvolume_exists ,然后只在inspect任务失败时才创build卷。

您现在可以使用-v参数在docker run的手册页中创build命名卷:

如果您提供了一个名称,Docker将通过该名称创build一个指定的卷。

  - name: Run mariadb docker_container: name: mariadb-container image: mariadb env: MYSQL_ROOT_PASSWORD: "secret-password" MYSQL_DATABASE: "db" MYSQL_USER: "user" MYSQL_PASSWORD: "password" ports: - "3306:3306" volumes: - mariadb-data:/var/lib/mysql 

mariadb-data是一个由mariadb-data自动创build的命名卷:

 $ docker volume inspect mariadb-data [ { "Name": "mariadb-data", "Driver": "local", "Mountpoint": "/var/lib/docker/volumes/mariadb-data/_data", "Labels": null, "Scope": "local" } ]