Docker Swarm, Compose and PostgreSQL
<p>I'm attempting to run a containerized application that relies on a postgres database. I am using Swarm and docker-compose to manage it.</p>

<p>I manually create a volume against a host that is part of the Swarm cluster ( <code>docker volume create --name=my_data</code> ) and use this volume in my compose file. I say in the compose file that the volume is external.</p>

<p>I find that when the container starts the data volume and the postgres application are not necessarily co-located. If they are <em>not</em> co-located, docker seems to create me a new volume.</p>

<p>A little further reading has lead me to believe that I should be looking at volume plugins such as Flocker. If I want to achieve persistent data for swarm applications using a database, is it best practice to use a volume plugin like this?</p>

<p>My compose file ...</p>

<pre><code>version: '2'
services:
   ui:
      image : ui
      ports:
       - 8080:8080
      environment:
       ADDRESS_SERVICE_URI: http://camel:8091
   camel:
      image : camel
      ports:
       - 18081:8081
       - 18091:8091
      expose:
       - 8081
       - 8091
   postgresql:
      image: postgres:9.4.5
      volumes:
       - app1_address_data:/var/lib/postgresql/data

volumes:
   app1_address_data:
      external: true

networks:
   default:
     external:
       name: my-net
</code></pre>