Handling dynamic application configuration with Docker

Does anyone have any advice about how to handle dynamic application configuration with Docker.

There is general purpose configuration - (e.g. endpoints for services, database, messaging) or connectivity behaviour (e.g timeouts and retries), sensitive item (like keys) or application, domain-specific configuration.

It seems difficult to reconcile the objective of having an immutable image with that of a flexible application whose behaviour can change without changing code.

Is it advisable treat configuration as data and use a configuration service to provide the configuration to the application? Or to use configuration manager, like puppet or chef, to bootstrap containers and change configuration without pushing out a new image?

Interested to hear people’s thoughts on this issue.