Docker volume examples for Amazon ECS
The following examples show how to provide ephemeral storage for a container and how to provide a shared volume for multiple conatiners, and how to provide NFS persistent storage for a container.
To provide ephemeral storage for a container using a Docker volume
In this example, a container uses an empty data volume that is disposed of after the task is finished. One example use case is that you might have a container that needs to access some scratch file storage location during a task. This task can be achieved using a Docker volume.
-
In the task definition
volumessection, define a data volume withnameandDockerVolumeConfigurationvalues. In this example, we specify the scope astaskso the volume is deleted after the task stops and use the built-inlocaldriver."volumes": [ { "name": "scratch", "dockerVolumeConfiguration" : { "scope": "task", "driver": "local", "labels": { "scratch": "space" } } } ] -
In the
containerDefinitionssection, define a container withmountPointsvalues that reference the name of the defined volume and thecontainerPathvalue to mount the volume at on the container."containerDefinitions": [ { "name": "container-1", "mountPoints": [ { "sourceVolume": "scratch", "containerPath": "/var/scratch" } ] } ]
To provide persistent storage for multiple containers using a Docker volume
In this example, you want a shared volume for multiple containers to use and
you want it to persist after any single task that use it stopped. The built-in
local driver is being used. This is so the volume is still tied
to the lifecycle of the container instance.
-
In the task definition
volumessection, define a data volume withnameandDockerVolumeConfigurationvalues. In this example, specify asharedscope so the volume persists, set autoprovision totrue. This is so that the volume is created for use. Then, also use the built-inlocaldriver."volumes": [ { "name": "database", "dockerVolumeConfiguration" : { "scope": "shared", "autoprovision": true, "driver": "local", "labels": { "database": "database_name" } } } ] -
In the
containerDefinitionssection, define a container withmountPointsvalues that reference the name of the defined volume and thecontainerPathvalue to mount the volume at on the container."containerDefinitions": [ { "name": "container-1", "mountPoints": [ { "sourceVolume": "database", "containerPath": "/var/database" } ] }, { "name": "container-2", "mountPoints": [ { "sourceVolume": "database", "containerPath": "/var/database" } ] } ]
To provide NFS persistent storage for a container using a Docker volume
In this example, a container uses an NFS data volume that is automatically
mounted when the task starts and unmounted when the task stops. This uses the
Docker built-in local driver. One example use case is that you
might have a local NFS storage and need to access it from an ECS Anywhere task.
This can be achieved using a Docker volume with NFS driver option.
-
In the task definition
volumessection, define a data volume withnameandDockerVolumeConfigurationvalues. In this example, specify ataskscope so the volume is unmounted after the task stops. Use thelocaldriver and configure thedriverOptswith thetype,device, andooptions accordingly. ReplaceNFS_SERVERwith the NFS server endpoint."volumes": [ { "name": "NFS", "dockerVolumeConfiguration" : { "scope": "task", "driver": "local", "driverOpts": { "type": "nfs", "device": "$NFS_SERVER:/mnt/nfs", "o": "addr=$NFS_SERVER" } } } ] -
In the
containerDefinitionssection, define a container withmountPointsvalues that reference the name of the defined volume and thecontainerPathvalue to mount the volume on the container."containerDefinitions": [ { "name": "container-1", "mountPoints": [ { "sourceVolume": "NFS", "containerPath": "/var/nfsmount" } ] } ]