In this specific case, it looks like the ADD command added the base image to the file system. If you run docker history --no-trunc docker/whalesay, the full command is:
/bin/sh -c #(nop) ADD file:f4d7b4b3402b5c53f266bb7fdd7e728493d9a17f9ef20c8cb1b4759b6e66b70f in /
docker history reports that particular layer is 188MB. Let's look at these layers in more detail:
$ docker save docker/whalesay -o whalesay.tar $ tar tvf whalesay.tar ... -rw-r--r-- 0/0 197181952 2015-05-25 22:04 cc88f763e297503d2407d6b462b2b390a6fd006b30f51c8efa03dd88fa801b89/layer.tar ...
Looks like a pretty good candidate! You can now extract that layer and pull files out of it.
$ tar xf whalesay.tar cc88f763e297503d2407d6b462b2b390a6fd006b30f51c8efa03dd88fa801b89/layer.tar $ tar xf cc88f763e297503d2407d6b462b2b390a6fd006b30f51c8efa03dd88fa801b89/layer.tar etc/passwd
If you're looking to pull a particular file out of a layer, but you don't know which layer, you could do this. First, extract all the layers:
$ tar xf whalesay.tar
Now you've got all the layers as individual .tar files. Let's find a file:
$ for layer in */layer.tar; do tar -tf $layer | grep docker.cow && echo $layer; done usr/local/share/cows/docker.cow 0523c5a0c4588dde33d61d171c41c2dc5c829db359f4d56ab896ab1c185ed936/layer.tar cowsay/cows/docker.cow 40e8ae7bb4e5b9eaac56f5be7aa614ed50f163020c87ba59e905e01ef0af0a4f/layer.tar cowsay/cows/docker.cow f9bc8676543761ff3033813257937aeb77e9bc84296eaf025e27fe01643927cf/layer.tar
Finally, extract the file from the layer you want:
$ tar xf 0523c5a0c4588dde33d61d171c41c2dc5c829db359f4d56ab896ab1c185ed936/layer.tar \ usr/local/share/cows/docker.cow
This will extract that file with the full path relative to the current directory.
$ cat usr/local/share/cows/docker.cow ## ## Docker Cow ## $the_cow = <<EOC; $thoughts $thoughts $thoughts ## . ## ## ## == ## ## ## ## === /""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \\______ o __/ \\ \\ __/ \\____\\______/ EOC