merge existing config when committing
Fixes
Docker-DCO-1.1-Signed-off-by: Wes Morgan (github: cap10morgan)
@@ -305,7 +305,7 @@ by using the ``git://`` schema.
-m, --message="": Commit message
-a, --author="": Author (eg. "John Hannibal Smith <hannibal@a-team.com>"
- --run="": Configuration to be applied when the image is launched with `docker run`.
+ --run="": Configuration changes to be applied when the image is launched with `docker run`.
(ex: -run='{"Cmd": ["cat", "/world"], "PortSpecs": ["22"]}')
.. _cli_commit_examples:
@@ -346,11 +346,40 @@ run ``ls /etc``.
apt host.conf lsb-base rc2.d
...
+Merged configs example
+......................
+
+Say you have a Dockerfile like so:
+
+.. code-block:: bash
+
+ ENV MYVAR foobar
+ RUN apt-get install openssh
+ EXPOSE 22
+ CMD ["/usr/sbin/sshd -D"]
+ ...
+
+If you run that, make some changes, and then commit, Docker will merge the environment variable and exposed port configuration settings with any that you specify in the -run= option. This is a change from Docker 0.8.0 and prior where no attempt was made to preserve any existing configuration on commit.
+
+.. code-block:: bash
+
+ $ docker build -t me/foo .
+ $ docker run -t -i me/foo /bin/bash
+ foo-container$ [make changes in the container]
+ foo-container$ exit
+ $ docker commit -run='{"Cmd": ["ls"]}' [container-id] me/bar
+ ...
+
+The me/bar image will now have port 22 exposed, MYVAR env var set to 'foobar', and its default command will be ["ls"].
+
+Note that this is currently a shallow merge. So, for example, if you had specified a new port spec in the -run= config above, that would have clobbered the 'EXPOSE 22' setting from the parent container.
+
Full -run example
.................
The ``--run`` JSON hash changes the ``Config`` section when running ``docker inspect CONTAINERID``
-or ``config`` when running ``docker inspect IMAGEID``.
+or ``config`` when running ``docker inspect IMAGEID``. Existing configuration key-values that are
+not overridden in the JSON hash will be merged in.
(Multiline is okay within a single quote ``'``)
