Incorrect memory accounting when using tmpfs volume

I have a workload where I want to use a container to write data to a tmpfs volume mounted from the host with -v. I would expect that data written to the volume would not count towards Docker’s memory limit for the container doing the write. However, data written to the host-mounted volume seems to count towards the container’s memory limit. Is this correct behavior? Is there any way to have a container write more data than its memory limit to the memory of the host machine?

Reproduction steps from a freshly-provisioned EC2 machine running amazon linux:

sudo yum install -y docker
# Mount a 5GB tmpfs 
sudo mkdir /mnt/tmpfs && sudo mount -t tmpfs -o size=5G tmpfs /mnt/tmpfs
# Get some data. This file is 3GB
wget https://datasets.elasticmapreduce.s3.amazonaws.com/ngrams/books/20090715/eng-us-all/1gram/data --no-check-certificate
sudo service docker start
sudo docker run --rm --memory=2G -it -v /mnt/tmpfs:/mnt/tmpfs -v ~/data:/data ubuntu /bin/bash
# Inside the container now
cp /data /mnt/tmpfs
# The cp command gets killed

If we don’t set the 2G memory limit, the copy will finish successfully.

If you are using a memory-based virtual file system, such as tmpfs, a common mistake is to not correctly identify the blocks on which memory accounting information is stored. If you use an incorrect identification of these blocks, then your data may be reported incorrectly in a number of ways.