Search code examples
amazon-web-servicesdockeramazon-ec2docker-volume

How to mount docker volume which is running in EC2 instance to EBS volume? What are the steps for that?


Currently ec2 instance is running and inside that docker container is running. I have 2 containers running in EC2 instance. 1 - Aplication container. 2 - Data Base(CouchDb) container. I need to store data which is in database to EBS volumes. I have a docker-compose file and I'm bringing up containers using 'docker-compose up' command.

version: '2.1'
services:
  web:
    build: .
    ports:
     - "4200:4200"
     - "7020:7020"
    depends_on:
      couchdb:
        condition: "service_healthy"
    volumes:
      - ./app:/usr/src/app/app
  couchdb:
    image: "couchdb:1.7.1"
    ports:
     - "5984:5984"
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:5984/"]
        interval: 10s
        timeout: 90s
        retries: 9

Solution

  • You need to bind the EC2 instance directory with CouchDB container.

    Where to Store Data

    Important note: There are several ways to store data used by applications that run in Docker containers. We encourage users of the couchdb images to familiarize themselves with the options available

    Create a data directory on a suitable volume on your host system, e.g. /home/ec2-user/data. Start your couchdb container like this:

    $ docker run --name mycouchdb -v /home/ec2-user/data:/opt/couchdb/data -d couchdb:tag
    

    The -v /home/ec2-user/data:/opt/couchdb/data part of the command mounts the /home/ec2-user/data directory from the underlying host system as /opt/couchdb/data inside the container, where CouchDB by default will write its data files.

    CouchDB Store Data

    Update:

    In the case of docker-compose

      couchdb:
        image: "couchdb:1.7.1"
        volumes:
          - /home/ec2-user/data:/opt/couchdb/data
        ports:
         - "5984:5984"