Search code examples
amazon-web-servicesdockernfs

Using AWS EFS with Docker


I am using the new Elastic File System provided by amazon, on my single container EB deploy. I can't figure out why the mounted EFS cannot be mapped into the container.

The EFS mount is successfully performed on the host at /efs-mount-point.

Provided to the Dockerrun.aws.json is

{
  "AWSEBDockerrunVersion": "1"
  "Volumes": [
    {
      "HostDirectory": "/efs-mount-point",
      "ContainerDirectory": "/efs-mount-point"
    }
  ]
}

The volume is then created in the container once it starts running. However it has mapped the hosts directory /efs-mount-point, not the actual EFS mount point. I can't figure out how to get Docker to map in the EFS volume mounted at /efs-mount-point instead of the host's directory.

Do NFS volumes play nice with Docker?


Solution

  • You need to restart docker after mounting the EFS volume in the host EC2 instance.

    Here's an example, .ebextensions/efs.config:

    commands:
       01mkdir:
          command: "mkdir -p /efs-mount-point"
       02mount:
          command: "mountpoint -q /efs-mount-point || mount -t nfs4 -o nfsvers=4.1 $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone).fs-fa35c253.efs.us-west-2.amazonaws.com:/ /efs-mount-point"
       03restart:
          command: "service docker restart"