Basically, what you're saying is, Docker sucks at being a foreign porting target for things developed for some other system. Well,
everything sucks at being a foreign porting target. Don't do that. Test and develop your app
using Docker. Install your app into the container
using Docker. These are the things Docker is
for--it's a development aid, not some performance-boosting alternative to virtualization. You have to
integrate it into your app's workflow; you can't just tack it on as some final "and then we also generate a Docker container version of our app" step at the end, or you lose every advantage Docker gives you.
Docker is made to, basically, develop apps the same way you develop them when using a PaaS like Heroku (or, more specifically, a PaaS like Dotcloud): have a frozen base+runtime image; compose a "slug" consisting of exactly the stuff in your build/ directory and layer it on top; and tell the target host to launch it. To upgrade, create a new slug, and rolling-restart your old instances into new instances.