CAMEL-8371 Improvements and enhancements to camel-docker component and updated 
to support docker-java 0.10.5


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/fb9556df
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/fb9556df
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/fb9556df

Branch: refs/heads/master
Commit: fb9556df0b9cb188a45310c29e6fd275d87754aa
Parents: eb86ec6
Author: Andrew Block <andy.bl...@gmail.com>
Authored: Sun Feb 22 09:45:16 2015 -0600
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Mon Feb 23 08:03:40 2015 +0100

----------------------------------------------------------------------
 components/camel-docker/README.md               |   92 +-
 .../component/docker/DockerClientFactory.java   |   98 +-
 .../component/docker/DockerClientProfile.java   |  118 +-
 .../camel/component/docker/DockerComponent.java |    5 +-
 .../component/docker/DockerConfiguration.java   |   40 +-
 .../camel/component/docker/DockerConstants.java |   76 +-
 .../camel/component/docker/DockerHelper.java    |   53 +-
 .../camel/component/docker/DockerOperation.java |  223 ++-
 .../docker/consumer/DockerEventsConsumer.java   |    2 +-
 .../docker/producer/DockerProducer.java         | 1701 ++++++++++--------
 .../component/docker/ssl/NoImplSslConfig.java   |   38 +
 .../docker/DockerClientProfileRegistryTest.java |   65 +
 .../headers/AttachContainerCmdHeaderTest.java   |    2 +-
 .../docker/headers/AuthCmdHeaderTest.java       |    3 +-
 .../docker/headers/BaseDockerHeaderTest.java    |   12 +
 .../docker/headers/BuildImageCmdHeaderTest.java |   12 +-
 .../headers/CommitContainerCmdHeaderTest.java   |  134 ++
 .../headers/CopyFileContainerCmdHeaderTest.java |    2 +-
 .../headers/CreateContainerCmdHeaderTest.java   |   91 +-
 .../headers/CreateImageCmdHeaderTest.java       |   11 +-
 .../headers/DiffContainerCmdHeaderTest.java     |    3 +
 .../docker/headers/ExecCreateCmdHeaderTest.java |   80 +
 .../docker/headers/ExecStartCmdHeaderTest.java  |   65 +
 .../docker/headers/InfoCmdHeaderTest.java       |    2 +-
 .../headers/InspectImageCmdHeaderTest.java      |    1 -
 .../headers/KillContainerCmdHeaderTest.java     |    1 -
 .../headers/ListContainersCmdHeaderTest.java    |    9 +-
 .../docker/headers/ListImagesCmdHeaderTest.java |    2 +-
 .../headers/LogContainerCmdHeaderTest.java      |    2 +-
 .../docker/headers/PushImageCmdHeaderTest.java  |    4 +
 .../headers/RemoveContainerCmdHeaderTest.java   |    2 +-
 .../headers/StartContainerCmdHeaderTest.java    |  121 ++
 .../docker/headers/TagImageCmdHeaderTest.java   |    4 +-
 33 files changed, 1985 insertions(+), 1089 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/README.md
----------------------------------------------------------------------
diff --git a/components/camel-docker/README.md 
b/components/camel-docker/README.md
index b13c5d2..637b8aa 100644
--- a/components/camel-docker/README.md
+++ b/components/camel-docker/README.md
@@ -19,16 +19,16 @@ All URI option can be passed as Header properties. Values 
found in a message hea
 | ------------- | ---------------- |
 |containerId|CamelDockerContainerId |
 
-## General Options
+## Client Profile
 
-The following parameters can be used with any invocation of the component
+A client profile encapsulates the parameters necessary to communicate with 
docker. It is constructed into a *DockerClientProfile* object from the 
following uri or or header values as described below
 
 The following options are required
 
 | Option | Header | Description | Default Value |
 |-----------|-----------|-----------------|-------------------|
 | host     | CamelDockerHost | Docker host | localhost |
-| port      | CamelDockerPort | Docker port | 5000 |
+| port      | CamelDockerPort | Docker port | 2375 |
 
 The following are additional optional parameters
 
@@ -36,28 +36,51 @@ The following are additional optional parameters
 |-----------|-----------|-----------------|-------------------|
 | username | CamelDockerUserName | User name to authenticate with | |
 | password | CamelDockerPassword | Password to authenticate with | |
-| email | CamelDockerEmail | Email address associated with the user | |
 | secure | CamelDockerSecure | Use HTTPS communication | false |
-| requestTimeout | CamelDockerRequestTimeout | Request timeout for response 
(in seconds) | 30 |
 |certPath | CamelDockerCertPath | Location containing the SSL certificate 
chain | | 
+| email | CamelDockerEmail | Email address associated with the user | |
+| requestTimeout | CamelDockerRequestTimeout | Request timeout for response 
(in seconds) | 30 |
+|serverAddress | CamelDockerServerAddress | Address of the Docker registry 
server (If not specified, *host* will be used) | | 
+|maxTotalConnections | CamelDockerMaxTotalConnections | Maximum number of 
total connections | 100 |
+|maxPerRouteConnections | CamelDockerMaxPerRouteConnections | Maximum number 
of connections per route | 100 |
+
+### Client Profile Bean
+
+Instead of leveraging uri or header parameters, a DockerClientProfile bean may 
be referenced using the *clientProfile* uri option which has been defined in 
the Camel Registry. This gives the user the option of defining a static 
configuration for docker connectivity without requiring the use of defining 
each parameter on the endpoint.
+
+The following illustrates how a DockerClientProfile can be defined in Spring 
DSL
+
+    <bean id="devClientProfile" 
class="org.apache.camel.component.docker.DockerClientProfile">
+        <property name="host" value="192.168.59.103" />
+        <property name="port" value="2376" />
+        <property name="secure" value="true" />
+        <property name="certPath" 
value="/Users/cameluser/.boot2docker/certs/boot2docker-vm"
+    </bean>
+
+
+Reference the bean in your Camel route
 
+```
+<from uri="direct:in" />
+<to uri="docker://info?clientProfile=#devClientProfile" />
+```
 
 ## Consumer Operations
 
 | Operation | Options | Description  | Produces |
 | ------------- | ---------------- | ------------- | ---------------- |
-|events| initialRange | Monitor Docker events (Streaming) | Event |
+|events| initialRange | Amount of time in the past to begin receiving events 
(Long) | Event |
 
 ## Producer Operations
 
 The following producer operations are available
 
-### Misc
+### General
 | Operation | Options | Description  | Returns |
 | ------------- | ---------------- | ------------- | ---------------- |
-| auth | | Check auth configuration | |
+| auth | Values obtained from the component general options| Validate auth 
configuration | AuthResponse |
 | info | | System wide information | Info |
-| ping | | Ping the Docker server | | 
+| ping | | Ping the Docker server |  |
 | version | | Show the docker version information | Version |
 
  
@@ -65,37 +88,44 @@ The following producer operations are available
 
 | Operation | Options | Description | Body Content | Returns |
 | ------------- | ---------------- | ------------- | ---------------- | 
---------------- |
+| image/build | noCache, quiet, remove, tag | Build an image from Dockerfile 
via stdin | **InputStream** or **File** | InputStream |
+| image/create | **repository** | Create an image | **InputStream** 
|CreateImageResponse |
+| image/inspect | **imageId** | Inspect an image | | InspectImageResponse |
 | image/list | filter, showAll | List images | | List&lt;Image&gt; |
-| image/create | **repository** | Create an image | InputStream 
|CreateImageResponse |
-| image/build | noCache, quiet, remove, tag | Build an image from Dockerfile 
via stdin | InputStream or File | InputStream |
 | image/pull |  **repository**, registry, tag | Pull an image from the 
registry | |InputStream |
-| image/push | **name** | Push an image on the registry | InputStream |
-| image/search | **term** | Search for images | | List&lt;SearchItem&gt; |
+| image/push | **name**, tag | Push an image on the registry | | InputStream |
 | image/remove | **imageId**, force, noPrune | Remove an image | | |
+| image/search | **term** | Search for images | | List&lt;SearchItem&gt; |
 | image/tag | **imageId**, **repository**, **tag**, **force** | Tag an image 
into a repository | | |   
-| image/inspect | **imageId** | Inspect an image | | InspectImageResponse |
 
 ### Containers
 
-| Operation | Options | Description  | Body Content |
+| Operation | Options | Description  | Body Content | Returns |
 | ------------- | ---------------- | ------------- | ---------------- |
-| container/list | showSize, showAll, before, since, limit, List containers | 
initialRange | List&lt;Container&gt; |
-| container/create | **imageId**, name, exposedPorts, workingDir, 
disableNetwork, hostname, user, tty, stdInOpen, stdInOnce, memoryLimit, 
memorySwap, cpuShares, attachStdIn, attachStdOut, attachStdErr, env, cmd, dns, 
image, volumes, volumesFrom | Create a container | CreateContainerResponse |
-| container/start | **containerId**, binds, links, lxcConf, portBindings, 
privileged, publishAllPorts, dns, dnsSearch, volumesFrom, networkMode, devices, 
restartPolicy, capAdd, capDrop | Start a container | | 
-| container/inspect | **containerId** | Inspect a container  | 
InspectContainerResponse |
-| container/wait | **containerId** | Wait a container | Integer
-| container/log | **containerId**, stdOut, stdErr, timestamps, followStream, 
tailAll, tail | Get container logs | InputStream |
-| container/attach | **containerId**, stdOut, stdErr, timestamps, logs, 
followStream | Attach to a container | InputStream |
-| container/stop | **containerId**, timeout | Stop a container | |
+| container/attach | **containerId**, followStream, logs, stdErr, stdOut, 
timestamps  | Attach to a container | | InputStream |
+| container/commit | **containerId**, author, attachStdErr, attachStdIn, 
attachStdOut, cmd, disableNetwork, env, exposedPorts, hostname, memory, 
memorySwap, message, openStdIn, pause, portSpecs, repository, stdInOnce, tag, 
tty, user, volumes, workingDir | Create a new image from a container's changes 
| | String |
+| container/copyfile | **containerId**, **resource**, hostPath | Copy files or 
folders from a container | | InputStream |
+| container/create | **image**, attachStdErr, attachStdIn, attachStdOut, 
capAdd, capDrop, cmd, cpuShares, disableNetwork, dns, entrypoint, env, 
exposedPorts, hostConfig, hostname, memoryLimit, memorySwap, name, portSpecs, 
stdInOnce, stdInOpen, tty, user, volumes, volumesFrom, workingDir | Create a 
container |  |CreateContainerResponse |
+| container/diff | **containerId**, containerIdDiff | Differences on the 
container filesystem | | List&lt;ChangeLog&gt; |
+| container/inspect | **containerId** | Inspect a container  | | 
InspectContainerResponse |
+| container/kill | **containerId**, signal | Kill a container | | |
+| container/list | before, limit, showSize, showAll, since | List containers | 
| List&lt;Container&gt; |
+| container/log | **containerId**, followStream, stdErr, stdOut, tail, 
tailAll, timestamps | Get container logs | | InputStream |
+| container/pause | **containerId** | Pause a container | | |
+| container/remove | **containerId**, force, removeVolumes | Remove a 
container | | |
 | container/restart | **containerId**, timeout | Restart a container | |
-| container/diff | **containerId** | Inspect changes on a container | 
ChangeLog |
-| container/kill | **containerId**, signal, | Kill a container | |
-| container/top | **containerId**, psArgs | List processes running in a 
container | TopContainerResponse |
-| container/pause | **containerId** | Pause a container | |
-| container/unpause | **containerId** | Unpause a container | |
-| container/commit | **containerId**, repository, message, tag, attachStdIn, 
attachStdOut, attachStdErr, cmd, disableNetwork, pause, env, exposedPorts, 
hostname, memory, memorySwap, openStdIn, portSpecs, stdInOnce, tty, user, 
volumes, hostname | Create a new image from a container's changes | String |
-| container/copyfile | **containerId**, **resource**, hostPath | Copy files or 
folders from a container | InputStream |
-| container/remove | **containerId**, force, removeVolumes | Remove a 
container | |
+| container/start | **containerId**, binds, capAdd, capDrop, devices, dns, 
dnsSearch, links, lxcConf, networkMode, portBindings, privileged, 
publishAllPorts, restartPolicy, volumesFrom | Start a container | | |
+| container/stop | **containerId**, timeout | Stop a container | |
+| container/top | **containerId**, psArgs | List processes running in a 
container | |TopContainerResponse |
+| container/unpause | **containerId** | Unpause a container | | |
+| container/wait | **containerId** | Blocks until a container is stopped | | |
+
+### Exec
+
+| Operation | Options | Description  | Body Content | Returns |
+| ------------- | ---------------- | ------------- | ---------------- |
+| exec/create | **containerId**, attachStdErr, attachStdIn, attachStdOut, cmd, 
tty | Setup an *exec* instance on a running container | | ExecCreateCmdResponse 
|
+| exec/start | **containerId**, detach, execId, tty | Starts a previously 
created *exec* instance | |InputStream |
 
 
 ## Examples

http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java
----------------------------------------------------------------------
diff --git 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java
 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java
index b1ac48b..2ec9929 100644
--- 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java
+++ 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java
@@ -20,9 +20,12 @@ import com.github.dockerjava.api.DockerClient;
 import com.github.dockerjava.api.command.DockerCmdExecFactory;
 import com.github.dockerjava.core.DockerClientBuilder;
 import com.github.dockerjava.core.DockerClientConfig;
+import com.github.dockerjava.core.LocalDirectorySSLConfig;
+import com.github.dockerjava.core.SSLConfig;
 import com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl;
 import org.apache.camel.Message;
 import org.apache.camel.component.docker.exception.DockerException;
+import org.apache.camel.component.docker.ssl.NoImplSslConfig;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -39,6 +42,7 @@ public final class DockerClientFactory {
      * Produces a {@link DockerClient} to communicate with Docker
      * 
      * @param dockerConfiguration
+     * @param endpointClientProfile a {@link DockerClientProfile} specified on 
the Endpoint
      * @param message the Camel message
      * @return a DockerClient
      * @throws DockerException
@@ -47,54 +51,84 @@ public final class DockerClientFactory {
         
         ObjectHelper.notNull(dockerConfiguration, "dockerConfiguration");
         
-        Integer port = null;
-        String host = null;
+        DockerClientProfile endpointClientProfile = 
dockerConfiguration.getClientProfile();
+        
+        DockerClientProfile clientProfile = null;
         DockerClient client = null;
-       
+
+        // Check if profile is specified in configuration
+        if(endpointClientProfile != null) {
+            clientProfile = endpointClientProfile;
+        }
+        else {
             
-        port = DockerHelper.getProperty(DockerConstants.DOCKER_PORT, 
dockerConfiguration, message, Integer.class);
-        host = DockerHelper.getProperty(DockerConstants.DOCKER_HOST, 
dockerConfiguration, message, String.class);
-       
-        int uriPort = port != null ? port : 
dockerConfiguration.getDefaultPort();
-        String uriHost = host != null ? host : 
dockerConfiguration.getDefaultHost();
-        
-        String username = 
DockerHelper.getProperty(DockerConstants.DOCKER_USERNAME, dockerConfiguration, 
message, String.class);
-        String password = 
DockerHelper.getProperty(DockerConstants.DOCKER_PASSWORD, dockerConfiguration, 
message, String.class);
-        String email = DockerHelper.getProperty(DockerConstants.DOCKER_EMAIL, 
dockerConfiguration, message, String.class);
-        Integer requestTimeout = 
DockerHelper.getProperty(DockerConstants.DOCKER_API_REQUEST_TIMEOUT, 
dockerConfiguration, message, Integer.class);
-        String serverAddress = 
DockerHelper.getProperty(DockerConstants.DOCKER_SERVER_ADDRESS, 
dockerConfiguration, message, String.class);
-        Boolean secure = 
DockerHelper.getProperty(DockerConstants.DOCKER_SECURE, dockerConfiguration, 
message, Boolean.class);
-        String certPath = 
DockerHelper.getProperty(DockerConstants.DOCKER_CERT_PATH, dockerConfiguration, 
message, String.class);
-        
-        DockerClientProfile clientProfile = new DockerClientProfile();
-        clientProfile.setHost(uriHost);
-        clientProfile.setPort(uriPort);
-        clientProfile.setEmail(email);
-        clientProfile.setUsername(username);
-        clientProfile.setPassword(password);
-        clientProfile.setRequestTimeout(requestTimeout);
-        clientProfile.setServerAddress(serverAddress);
-        clientProfile.setCertPath(certPath);
+            clientProfile = new DockerClientProfile();
         
-        if (secure != null && secure) {
+            Integer port = 
DockerHelper.getProperty(DockerConstants.DOCKER_PORT, dockerConfiguration, 
message, Integer.class, clientProfile.getPort());
+            String host = 
DockerHelper.getProperty(DockerConstants.DOCKER_HOST, dockerConfiguration, 
message, String.class, clientProfile.getHost());
+                       
+            Integer maxTotalConnections = 
DockerHelper.getProperty(DockerConstants.DOCKER_MAX_TOTAL_CONNECTIONS, 
dockerConfiguration, message, Integer.class, 
clientProfile.getMaxTotalConnections());
+            Integer maxPerRouteConnections = 
DockerHelper.getProperty(DockerConstants.DOCKER_MAX_PER_ROUTE_CONNECTIONS, 
dockerConfiguration, message, Integer.class, 
clientProfile.getMaxPerRouteConnections());
+                
+            String username = 
DockerHelper.getProperty(DockerConstants.DOCKER_USERNAME, dockerConfiguration, 
message, String.class, clientProfile.getUsername());
+            String password = 
DockerHelper.getProperty(DockerConstants.DOCKER_PASSWORD, dockerConfiguration, 
message, String.class, clientProfile.getPassword());
+            String email = 
DockerHelper.getProperty(DockerConstants.DOCKER_EMAIL, dockerConfiguration, 
message, String.class, clientProfile.getEmail());
+            Integer requestTimeout = 
DockerHelper.getProperty(DockerConstants.DOCKER_API_REQUEST_TIMEOUT, 
dockerConfiguration, message, Integer.class, clientProfile.getRequestTimeout());
+            String serverAddress = 
DockerHelper.getProperty(DockerConstants.DOCKER_SERVER_ADDRESS, 
dockerConfiguration, message, String.class, clientProfile.getServerAddress());
+            String certPath = 
DockerHelper.getProperty(DockerConstants.DOCKER_CERT_PATH, dockerConfiguration, 
message, String.class, clientProfile.getCertPath());
+            Boolean secure = 
DockerHelper.getProperty(DockerConstants.DOCKER_SECURE, dockerConfiguration, 
message, Boolean.class, clientProfile.isSecure());
+            
+            clientProfile.setHost(host);
+            clientProfile.setPort(port);
+            clientProfile.setEmail(email);
+            clientProfile.setUsername(username);
+            clientProfile.setPassword(password);
+            clientProfile.setRequestTimeout(requestTimeout);
+            clientProfile.setServerAddress(serverAddress);
+            clientProfile.setCertPath(certPath);
+            clientProfile.setMaxTotalConnections(maxTotalConnections);
+            clientProfile.setMaxPerRouteConnections(maxPerRouteConnections);
             clientProfile.setSecure(secure);
+
         }
-        
+
         client = dockerConfiguration.getClient(clientProfile);
-        
+
         if (client != null) {
             return client;
         }
+
+        SSLConfig sslConfig;
+        if (clientProfile.isSecure() != null && clientProfile.isSecure()) {
+
+            ObjectHelper.notNull(clientProfile.getCertPath(), "certPath must 
be specified in secure mode");
+
+            sslConfig = new 
LocalDirectorySSLConfig(clientProfile.getCertPath());
+        }
+        else {
+            // docker-java requires an implementation of SslConfig interface
+            // to be available for DockerCmdExecFactoryImpl
+            sslConfig = new NoImplSslConfig();
+        }
  
         DockerClientConfig.DockerClientConfigBuilder configBuilder = new 
DockerClientConfig.DockerClientConfigBuilder()
-            
.withUsername(username).withPassword(password).withEmail(email).withReadTimeout(requestTimeout).withDockerCertPath(certPath)
-            .withUri(clientProfile.toUrl());
+            
.withUsername(clientProfile.getUsername()).withPassword(clientProfile.getPassword()).withEmail(clientProfile.getEmail()).withReadTimeout(clientProfile.getRequestTimeout())
+            
.withUri(clientProfile.toUrl()).withMaxPerRouteConnections(clientProfile.getMaxPerRouteConnections()).withMaxTotalConnections(clientProfile.getMaxTotalConnections())
+            
.withSSLConfig(sslConfig).withServerAddress(clientProfile.getServerAddress());
         
+        if(clientProfile.getCertPath() != null) {
+            configBuilder.withDockerCertPath(clientProfile.getCertPath());
+        }
+
         DockerClientConfig config = configBuilder.build();
         
         DockerCmdExecFactory dockerClientFactory = new 
DockerCmdExecFactoryImpl();
         
-        return 
DockerClientBuilder.getInstance(config).withDockerCmdExecFactory(dockerClientFactory).build();
+        client = 
DockerClientBuilder.getInstance(config).withDockerCmdExecFactory(dockerClientFactory).build();
+        
+        dockerConfiguration.setClient(clientProfile, client);
+        
+        return client;
         
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java
----------------------------------------------------------------------
diff --git 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java
 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java
index 62bf42e..7a53a08 100644
--- 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java
+++ 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientProfile.java
@@ -20,6 +20,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 
 import org.apache.camel.component.docker.exception.DockerException;
+import org.apache.camel.spi.UriParam;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -27,16 +28,27 @@ import org.apache.camel.util.ObjectHelper;
  */
 public class DockerClientProfile {
     
-    private String host;
-    private Integer port;
+    @UriParam(defaultValue = "localhost")
+    private String host = "localhost";
+    
+    @UriParam(defaultValue = "2375")
+    private Integer port = 2375;
+
     private String username;
     private String password;
     private String email;
     private String serverAddress;
     private Integer requestTimeout;
-    private boolean secure;
+    private Boolean secure;
     private String certPath;
     
+    @UriParam(defaultValue = "100")
+    private Integer maxTotalConnections = 100;
+
+    @UriParam(defaultValue = "100")
+    private Integer maxPerRouteConnections = 100;
+
+
     public String getHost() {
         return host;
     }
@@ -80,10 +92,10 @@ public class DockerClientProfile {
     public void setRequestTimeout(Integer requestTimeout) {
         this.requestTimeout = requestTimeout;
     }
-    public boolean isSecure() {
+    public Boolean isSecure() {
         return secure;
     }
-    public void setSecure(boolean secure) {
+    public void setSecure(Boolean secure) {
         this.secure = secure;
     }
     public String getCertPath() {
@@ -92,12 +104,24 @@ public class DockerClientProfile {
     public void setCertPath(String certPath) {
         this.certPath = certPath;
     }
+    public Integer getMaxTotalConnections() {
+        return maxTotalConnections;
+    }
+    public void setMaxTotalConnections(Integer maxTotalConnections) {
+        this.maxTotalConnections = maxTotalConnections;
+    }
+    public Integer getMaxPerRouteConnections() {
+        return maxPerRouteConnections;
+    }
+    public void setMaxPerRouteConnections(Integer maxPerRouteConnections) {
+        this.maxPerRouteConnections = maxPerRouteConnections;
+    }
     public String toUrl() throws DockerException {
         ObjectHelper.notNull(this.host, "host");
         ObjectHelper.notNull(this.port, "port");
 
         URL uri;
-        String secure = this.secure ? "https" : "http";
+        String secure = this.secure != null && this.secure ? "https" : "http";
         try {
             uri = new URL(secure, this.host, this.port, "");
         } catch (MalformedURLException e) {
@@ -107,7 +131,6 @@ public class DockerClientProfile {
         return uri.toString();
 
     }
-    
     @Override
     public int hashCode() {
         final int prime = 31;
@@ -115,87 +138,82 @@ public class DockerClientProfile {
         result = prime * result + ((certPath == null) ? 0 : 
certPath.hashCode());
         result = prime * result + ((email == null) ? 0 : email.hashCode());
         result = prime * result + ((host == null) ? 0 : host.hashCode());
+        result = prime * result + ((maxPerRouteConnections == null) ? 0 : 
maxPerRouteConnections.hashCode());
+        result = prime * result + ((maxTotalConnections == null) ? 0 : 
maxTotalConnections.hashCode());
         result = prime * result + ((password == null) ? 0 : 
password.hashCode());
         result = prime * result + ((port == null) ? 0 : port.hashCode());
         result = prime * result + ((requestTimeout == null) ? 0 : 
requestTimeout.hashCode());
-        result = prime * result + (secure ? 1231 : 1237);
+        result = prime * result + ((secure == null) ? 0 : secure.hashCode());
         result = prime * result + ((serverAddress == null) ? 0 : 
serverAddress.hashCode());
         result = prime * result + ((username == null) ? 0 : 
username.hashCode());
         return result;
     }
-    
     @Override
     public boolean equals(Object obj) {
-        if (this == obj) {
+        if (this == obj)
             return true;
-        }
-        if (obj == null) {
+        if (obj == null)
             return false;
-        }
-        if (getClass() != obj.getClass()) {
+        if (getClass() != obj.getClass())
             return false;
-        }
         DockerClientProfile other = (DockerClientProfile)obj;
         if (certPath == null) {
-            if (other.certPath != null) {
+            if (other.certPath != null)
                 return false;
-            }
-        } else if (!certPath.equals(other.certPath)) {
+        } else if (!certPath.equals(other.certPath))
             return false;
-        }
         if (email == null) {
-            if (other.email != null) {
+            if (other.email != null)
                 return false;
-            }
-        } else if (!email.equals(other.email)) {
+        } else if (!email.equals(other.email))
             return false;
-        }
         if (host == null) {
-            if (other.host != null) {
+            if (other.host != null)
                 return false;
-            }
-        } else if (!host.equals(other.host)) {
+        } else if (!host.equals(other.host))
+            return false;
+        if (maxPerRouteConnections == null) {
+            if (other.maxPerRouteConnections != null)
+                return false;
+        } else if 
(!maxPerRouteConnections.equals(other.maxPerRouteConnections))
+            return false;
+        if (maxTotalConnections == null) {
+            if (other.maxTotalConnections != null)
+                return false;
+        } else if (!maxTotalConnections.equals(other.maxTotalConnections))
             return false;
-        }
         if (password == null) {
-            if (other.password != null) {
+            if (other.password != null)
                 return false;
-            }
-        } else if (!password.equals(other.password)) {
+        } else if (!password.equals(other.password))
             return false;
-        }
         if (port == null) {
-            if (other.port != null) {
+            if (other.port != null)
                 return false;
-            }
-        } else if (!port.equals(other.port)) {
+        } else if (!port.equals(other.port))
             return false;
-        }
         if (requestTimeout == null) {
-            if (other.requestTimeout != null) {
+            if (other.requestTimeout != null)
                 return false;
-            }
-        } else if (!requestTimeout.equals(other.requestTimeout)) {
+        } else if (!requestTimeout.equals(other.requestTimeout))
             return false;
-        }
-        if (secure != other.secure) {
+        if (secure == null) {
+            if (other.secure != null)
+                return false;
+        } else if (!secure.equals(other.secure))
             return false;
-        }
         if (serverAddress == null) {
-            if (other.serverAddress != null) {
+            if (other.serverAddress != null)
                 return false;
-            }
-        } else if (!serverAddress.equals(other.serverAddress)) {
+        } else if (!serverAddress.equals(other.serverAddress))
             return false;
-        }
         if (username == null) {
-            if (other.username != null) {
+            if (other.username != null)
                 return false;
-            }
-        } else if (!username.equals(other.username)) {
+        } else if (!username.equals(other.username))
             return false;
-        }
         return true;
     }
- 
+    
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java
----------------------------------------------------------------------
diff --git 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java
 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java
index 9241fcb..261adf3 100644
--- 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java
+++ 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerComponent.java
@@ -37,9 +37,12 @@ public class DockerComponent extends DefaultComponent {
         this.configuration = configuration;
     }
     
+    @Override
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
         
-        DockerConfiguration configuration = getConfiguration();
+        // Each endpoint can have its own configuration so make
+        // a copy of the configuration
+        DockerConfiguration configuration = getConfiguration().copy();
         
         String normalizedRemaining = remaining.replaceAll("/", "");
         

http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java
----------------------------------------------------------------------
diff --git 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java
 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java
index 60c21de..9268a36 100644
--- 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java
+++ 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java
@@ -16,30 +16,27 @@
  */
 package org.apache.camel.component.docker;
 
+import com.github.dockerjava.api.DockerClient;
+
 import java.util.HashMap;
 import java.util.Map;
 
-import com.github.dockerjava.api.DockerClient;
-
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.docker.exception.DockerException;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
 
 @UriParams
-public class DockerConfiguration {
-    private static final String DEFAULT_DOCKER_HOST = "localhost";
-    private static final int DEFAULT_DOCKER_PORT = 2375;
+public class DockerConfiguration implements Cloneable {
 
     @UriPath
     private DockerOperation operation;
 
+    private DockerClientProfile clientProfile;
+
     private Map<String, Object> parameters = new HashMap<String, Object>();
     private Map<DockerClientProfile, DockerClient> clients = new 
HashMap<DockerClientProfile, DockerClient>();
 
-    public void setClient(DockerClientProfile clientProfile, DockerClient 
client) {
-        clients.put(clientProfile, client);
-    }
-
     public Map<String, Object> getParameters() {
         return parameters;
     }
@@ -56,17 +53,30 @@ public class DockerConfiguration {
         this.operation = operation;
     }
 
-    public String getDefaultHost() {
-        return DEFAULT_DOCKER_HOST;
+    public DockerClient getClient(DockerClientProfile clientProfile) throws 
DockerException {
+        return clients.get(clientProfile);
+    }
+
+    public void setClient(DockerClientProfile clientProfile, DockerClient 
client) {
+        clients.put(clientProfile, client);
     }
 
-    public Integer getDefaultPort() {
-        return DEFAULT_DOCKER_PORT;
+    public void setClientProfile(DockerClientProfile clientProfile) {
+        this.clientProfile = clientProfile;
     }
 
-    public DockerClient getClient(DockerClientProfile clientProfile) throws 
DockerException {
-        return clients.get(clientProfile);
+    public DockerClientProfile getClientProfile() {
+        return clientProfile;
+    }
 
+    public DockerConfiguration copy() {
+        try {
+            return (DockerConfiguration) clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
     }
 
+
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java
----------------------------------------------------------------------
diff --git 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java
 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java
index 6ade1d0..d70b6df 100644
--- 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java
+++ 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java
@@ -28,14 +28,17 @@ public final class DockerConstants {
 
     public static final Map<String, Class<?>> DOCKER_DEFAULT_PARAMETERS = new 
HashMap<String, Class<?>>();
 
+    /** Connectivity **/
+    public static final String DOCKER_CLIENT_PROFILE = 
"CamelDockerClientProfile";
 
     /** Connectivity **/
+    public static final String DOCKER_API_REQUEST_TIMEOUT = 
"CamelDockerRequestTimeout";
+    public static final String DOCKER_CERT_PATH = "CamelDockerCertPath";
     public static final String DOCKER_HOST = "CamelDockerHost";
     public static final String DOCKER_PORT = "CamelDockerPort";
+    public static final String DOCKER_MAX_PER_ROUTE_CONNECTIONS = 
"CamelDockerMaxPerRouteConnections";
+    public static final String DOCKER_MAX_TOTAL_CONNECTIONS = 
"CamelDockerMaxTotalConnections";
     public static final String DOCKER_SECURE = "CamelDockerSecure";
-    public static final String DOCKER_API_REQUEST_TIMEOUT = 
"CamelDockerRequestTimeout";
-    public static final String DOCKER_CERT_PATH = "CamelDockerCertPath";
-    
     
     /** List Images **/
     public static final String DOCKER_FILTER = "CamelDockerFilter";
@@ -46,15 +49,15 @@ public final class DockerConstants {
     public static final String DOCKER_IMAGE_ID = "CamelDockerImageId";
 
     /** Auth **/
-    public static final String DOCKER_USERNAME = "CamelDockerUsername";
-    public static final String DOCKER_PASSWORD = "CamelDockerPassword";
     public static final String DOCKER_EMAIL = "CamelDockerEmail";
+    public static final String DOCKER_PASSWORD = "CamelDockerPassword";
     public static final String DOCKER_SERVER_ADDRESS = 
"CamelDockerServerAddress";
+    public static final String DOCKER_USERNAME = "CamelDockerUsername";
     
     /** Pull **/
+    public static final String DOCKER_REGISTRY = "CamelDockerRegistry";
     public static final String DOCKER_REPOSITORY = "CamelDockerRepository";
     public static final String DOCKER_TAG = "CamelDockerTag";
-    public static final String DOCKER_REGISTRY = "CamelDockerRegistry";
     
     /** Push **/
     public static final String DOCKER_NAME = "CamelDockerName";
@@ -70,10 +73,10 @@ public final class DockerConstants {
     public static final String DOCKER_INITIAL_RANGE = 
"CamelDockerInitialRange";
     
     /** List Container **/
+    public static final String DOCKER_BEFORE = "CamelDockerBefore";
     public static final String DOCKER_LIMIT = "CamelDockerLimit";
     public static final String DOCKER_SHOW_SIZE = "CamelDockerShowSize";
     public static final String DOCKER_SINCE = "CamelDockerSince";
-    public static final String DOCKER_BEFORE = "CamelDockerBefore";
 
 
     /** Remove Container **/
@@ -81,19 +84,22 @@ public final class DockerConstants {
 
     /** Attach Container **/
     public static final String DOCKER_FOLLOW_STREAM = 
"CamelDockerFollowStream";
-    public static final String DOCKER_STD_OUT = "CamelDockerStdOut";
+    public static final String DOCKER_LOGS = "CamelDockerLogs";
     public static final String DOCKER_STD_ERR = "CamelDockerStdErr";
+    public static final String DOCKER_STD_OUT = "CamelDockerStdOut";
     public static final String DOCKER_TIMESTAMPS = "CamelDockerTimestamps";
-    public static final String DOCKER_LOGS = "CamelDockerLogs";
     
     /** Logs **/
     public static final String DOCKER_TAIL = "CamelDockerTail";
     public static final String DOCKER_TAIL_ALL = "CamelDockerTailAll";
     
     /** Copy **/
-    public static final String DOCKER_RESOURCE = "CamelDockerResource";
     public static final String DOCKER_HOST_PATH = "CamelDockerHostPath";
-    
+    public static final String DOCKER_RESOURCE = "CamelDockerResource";
+
+    /** Diff Container **/
+    public static final String DOCKER_CONTAINER_ID_DIFF = 
"CamelDockerContainerIdDiff";
+
     /** Stop Container **/
     public static final String DOCKER_TIMEOUT = "CamelDockerTimeout";
 
@@ -107,23 +113,25 @@ public final class DockerConstants {
     public static final String DOCKER_NO_CACHE = "CamelDockerNoCache";
     public static final String DOCKER_QUIET = "CamelDockerQuiet";
     public static final String DOCKER_REMOVE = "CamelDockerRemove";
+    public static final String DOCKER_TAR_INPUT_STREAM = 
"CamelDockerTarInputStream";
     
-    /** Commit **/
-    public static final String DOCKER_COMMENT = "CamelDockerComment";
-    public static final String DOCKER_MESSAGE = "CamelDockerMessage";
-    public static final String DOCKER_AUTHOR = "CamelDockerAuthor";
+    
+    /** Commit Container **/
     public static final String DOCKER_ATTACH_STD_ERR = 
"CamelDockerAttachStdErr";
     public static final String DOCKER_ATTACH_STD_IN = "CamelDockerAttachStdIn";
     public static final String DOCKER_ATTACH_STD_OUT = 
"CamelDockerAttachStdOut";
+    public static final String DOCKER_AUTHOR = "CamelDockerAuthor";
     public static final String DOCKER_CMD = "CamelDockerCmd";
+    public static final String DOCKER_COMMENT = "CamelDockerComment";
     public static final String DOCKER_DISABLE_NETWORK = 
"CamelDockerDisableNetwork";
     public static final String DOCKER_ENV = "CamelDockerEnv";
-    public static final String DOCKER_PAUSE = "CamelDockerPause";
     public static final String DOCKER_EXPOSED_PORTS = 
"CamelDockerExposedPorts";
     public static final String DOCKER_HOSTNAME = "CamelDockerHostname";
+    public static final String DOCKER_MESSAGE = "CamelDockerMessage";
     public static final String DOCKER_MEMORY = "CamelDockerMemory";
     public static final String DOCKER_MEMORY_SWAP = "CamelDockerMemorySwap";
     public static final String DOCKER_OPEN_STD_IN = "CamelDockerOpenStdIn";
+    public static final String DOCKER_PAUSE = "CamelDockerPause";
     public static final String DOCKER_PORT_SPECS = "CamelDockerPortSpecs";
     public static final String DOCKER_STD_IN_ONCE = "CamelDockerStdInOnce";
     public static final String DOCKER_TTY = "CamelDockerTty";
@@ -132,36 +140,46 @@ public final class DockerConstants {
     public static final String DOCKER_WORKING_DIR = "CamelDockerWorkingDir";
 
     /** Create Container **/
-    public static final String DOCKER_MEMORY_LIMIT = "CamelDockerMemoryLimit"; 
   
     public static final String DOCKER_CPU_SHARES = "CamelDockerCpuShares";
     public static final String DOCKER_DNS = "CamelDockerDns";
+    public static final String DOCKER_ENTRYPOINT = "CamelDockerEntryPoint";
+    public static final String DOCKER_HOST_CONFIG = "CamelDockerHostConfig";
     public static final String DOCKER_IMAGE = "CamelDockerImage";
+    public static final String DOCKER_MEMORY_LIMIT = "CamelDockerMemoryLimit"; 
   
     public static final String DOCKER_STD_IN_OPEN = "CamelDockerStdInOpen";
     public static final String DOCKER_VOLUMES_FROM = "CamelDockerVolumesFrom";
+
     
     /** Start Container **/
     public static final String DOCKER_BINDS = "CamelDockerBinds";    
+    public static final String DOCKER_CAP_ADD = "CamelDockerCapAdd";
+    public static final String DOCKER_CAP_DROP = "CamelDockerCapDrop";
+    public static final String DOCKER_DEVICES = "CamelDockeDevices";
+    public static final String DOCKER_DNS_SEARCH = "CamelDockerDnsSearch";
     public static final String DOCKER_LINKS = "CamelDockerLinks"; 
     public static final String DOCKER_LXC_CONF = "CamelDockerLxcConf";    
-    public static final String DOCKER_PUBLISH_ALL_PORTS = 
"CamelDockerPublishAllPorts";
-    public static final String DOCKER_PORT_BINDINGS = 
"CamelDockerPortBindings"; 
-    public static final String DOCKER_PRIVILEGED = "CamelDockerDnsSearch";    
-    public static final String DOCKER_DNS_SEARCH = "CamelDockerDnsSearch";    
     public static final String DOCKER_NETWORK_MODE = "CamelNetworkMode";
-    public static final String DOCKER_DEVICES = "CamelDockeDevices";
+    public static final String DOCKER_PORT_BINDINGS = "CamelDockerPortBinding";
+    public static final String DOCKER_PORTS = "CamelDockerPorts";
+    public static final String DOCKER_PRIVILEGED = "CamelDockerDnsPrivileged";
+    public static final String DOCKER_PUBLISH_ALL_PORTS = 
"CamelDockerPublishAllPorts";
     public static final String DOCKER_RESTART_POLICY = 
"CamelDockerRestartPolicy";
-    public static final String DOCKER_CAP_ADD = "CamelDockerCapAdd";
-    public static final String DOCKER_CAP_DROP = "CamelDockerCapDrop";
     
+    /** Exec **/
+    public static final String DOCKER_DETACH = "CamelDockerDetach";
+    public static final String DOCKER_EXEC_ID = "CamelDockerExecId";
+
+
     static {
+        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_CERT_PATH, String.class);
+        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_CLIENT_PROFILE, String.class);
+        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_EMAIL, String.class);
         DOCKER_DEFAULT_PARAMETERS.put(DOCKER_HOST, String.class);
-        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_PORT, Integer.class);
-        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_USERNAME, String.class);
         DOCKER_DEFAULT_PARAMETERS.put(DOCKER_PASSWORD, String.class);
-        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_EMAIL, String.class);
-        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_SERVER_ADDRESS, String.class);
+        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_PORT, Integer.class);
         DOCKER_DEFAULT_PARAMETERS.put(DOCKER_SECURE, Boolean.class);
-        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_CERT_PATH, String.class);
+        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_SERVER_ADDRESS, String.class);
+        DOCKER_DEFAULT_PARAMETERS.put(DOCKER_USERNAME, String.class);
     }
     
     private DockerConstants() {

http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java
----------------------------------------------------------------------
diff --git 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java
 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java
index 7d7cef0..b7934ca 100644
--- 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java
+++ 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerHelper.java
@@ -117,7 +117,7 @@ public final class DockerHelper {
         
         return formattedName.toString();
     }
-    
+
     /**
      * Attempts to locate a given property name within a URI parameter or the 
message header. 
      * A found value in a message header takes precedence over a URI parameter.
@@ -128,8 +128,24 @@ public final class DockerHelper {
      * @param clazz
      * @return
      */
-    @SuppressWarnings("unchecked")
     public static <T> T getProperty(String name, DockerConfiguration 
configuration, Message message, Class<T> clazz) {
+        return getProperty(name, configuration, message, clazz, null);
+    }
+
+    /**
+     * Attempts to locate a given property name within a URI parameter or the 
message header.
+     * A found value in a message header takes precedence over a URI 
parameter. Returns a
+     * default value if given
+     *
+     * @param name
+     * @param configuration
+     * @param message
+     * @param clazz
+     * @param defaultValue
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getProperty(String name, DockerConfiguration 
configuration, Message message, Class<T> clazz, T defaultValue) {
         // First attempt to locate property from Message Header, then fallback 
to Endpoint property
        
         if (message != null) {
@@ -152,6 +168,9 @@ public final class DockerHelper {
                 return (T)BooleanUtils.toBooleanObject((String)prop, "true", 
"false", "null");
             }
         }
+        else if (defaultValue != null) {
+            return defaultValue;
+        }
         
         return null;
         
@@ -181,9 +200,9 @@ public final class DockerHelper {
                     return headerArray;
 
                 }
-                
+
                 if (header.getClass().isArray()) {
-                    if 
(header.getClass().getDeclaringClass().isAssignableFrom(clazz)) {
+                    if 
(header.getClass().getComponentType().isAssignableFrom(clazz) || 
header.getClass().getDeclaringClass().isAssignableFrom(clazz)) {
                         return (T[])header;
                     }
                 }
@@ -194,27 +213,12 @@ public final class DockerHelper {
         return null;
         
     }
-    
-    public static AuthConfig getAuthConfig(DockerConfiguration configuration, 
Message message) {
-        String username = getProperty(DockerConstants.DOCKER_USERNAME, 
configuration, message, String.class);
-        String password = getProperty(DockerConstants.DOCKER_PASSWORD, 
configuration, message, String.class);
-
-        ObjectHelper.notNull(username, "username");
-        ObjectHelper.notNull(password, "password");
-        
-        String email = getProperty(DockerConstants.DOCKER_EMAIL, 
configuration, message, String.class);
-        String serverAddress = 
getProperty(DockerConstants.DOCKER_SERVER_ADDRESS, configuration, message, 
String.class);
-
-        
-        AuthConfig authConfig = new AuthConfig();
-        authConfig.setUsername(username);
-        authConfig.setPassword(password);
-        authConfig.setEmail(email);
-        authConfig.setServerAddress(serverAddress);
         
-        return authConfig;
-    }
-    
+    /**
+     * @param headerName name of the header
+     * @param message the Camel message
+     * @return
+     */
     public static String[] parseDelimitedStringHeader(String headerName, 
Message message) {
 
         Object header = message.getHeader(headerName);
@@ -234,5 +238,4 @@ public final class DockerHelper {
 
     }
     
-    
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
----------------------------------------------------------------------
diff --git 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
index 715f700..0fb15cb 100644
--- 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
+++ 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
@@ -25,8 +25,11 @@ import java.util.Map;
  */
 public enum DockerOperation {
     
+    /** Events **/
     EVENTS("events", false, true,
-         DockerConstants.DOCKER_INITIAL_RANGE, Long.class),        
+         DockerConstants.DOCKER_INITIAL_RANGE, Long.class),   
+         
+    /** General **/
     AUTH("auth", false, true,
          DockerConstants.DOCKER_USERNAME, String.class,
          DockerConstants.DOCKER_PASSWORD, String.class,
@@ -35,6 +38,18 @@ public enum DockerOperation {
     INFO("info", false, true),
     PING("ping", false, true),
     VERSION("version", false, true),
+      
+    /** Images **/
+    BUILD_IMAGE("imagebuild", false, true,
+         DockerConstants.DOCKER_NO_CACHE, Boolean.class,
+         DockerConstants.DOCKER_REMOVE, Boolean.class,
+         DockerConstants.DOCKER_QUIET, Boolean.class),
+    CREATE_IMAGE("imagecreate", false, true,
+         DockerConstants.DOCKER_REPOSITORY, String.class),
+    INSPECT_IMAGE("imageinspect", false, true,
+         DockerConstants.DOCKER_IMAGE_ID, String.class,
+         DockerConstants.DOCKER_NO_PRUNE, Boolean.class,
+         DockerConstants.DOCKER_FORCE, Boolean.class),
     LIST_IMAGES("imagelist", false, true,
          DockerConstants.DOCKER_FILTER, String.class,
          DockerConstants.DOCKER_SHOW_ALL, Boolean.class),
@@ -44,132 +59,148 @@ public enum DockerOperation {
          DockerConstants.DOCKER_REPOSITORY, String.class),
     PUSH_IMAGE("imagepush", false, true,
          DockerConstants.DOCKER_NAME, String.class,
-         DockerConstants.DOCKER_USERNAME, String.class,
-         DockerConstants.DOCKER_PASSWORD, String.class,
-         DockerConstants.DOCKER_EMAIL, String.class,
-         DockerConstants.DOCKER_SERVER_ADDRESS, String.class),
-    CREATE_IMAGE("imagecreate", false, true,
-         DockerConstants.DOCKER_REPOSITORY, String.class),
-    SEARCH_IMAGES("imagesearch", false, true,
-         DockerConstants.DOCKER_TERM, String.class),
+         DockerConstants.DOCKER_TAG, String.class),
     REMOVE_IMAGE("imageremove", false, true,
          DockerConstants.DOCKER_IMAGE_ID, String.class,
          DockerConstants.DOCKER_FORCE, Boolean.class,
          DockerConstants.DOCKER_NO_PRUNE, String.class),
-    INSPECT_IMAGE("imageinspect", false, true,
-         DockerConstants.DOCKER_IMAGE_ID, String.class,
-         DockerConstants.DOCKER_NO_PRUNE, Boolean.class,
-         DockerConstants.DOCKER_FORCE, Boolean.class),
-    LIST_CONTAINERS("containerlist", false, true,
-         DockerConstants.DOCKER_LIMIT, String.class,
-         DockerConstants.DOCKER_SHOW_ALL, Boolean.class,
-         DockerConstants.DOCKER_SHOW_SIZE, Boolean.class,
-         DockerConstants.DOCKER_BEFORE, String.class,
-         DockerConstants.DOCKER_SINCE, String.class),   
-    WAIT_CONTAINER("containerwait", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class),
-    INSPECT_CONTAINER("inspectcontainer", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class),  
-    REMOVE_CONTAINER("removecontainer", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class,
+    SEARCH_IMAGES("imagesearch", false, true,
+         DockerConstants.DOCKER_TERM, String.class),
+    TAG_IMAGE("imagetag", false, true,
          DockerConstants.DOCKER_FORCE, Boolean.class,
-         DockerConstants.DOCKER_REMOVE_VOLUMES, Boolean.class),
+         DockerConstants.DOCKER_IMAGE_ID, String.class,
+         DockerConstants.DOCKER_REPOSITORY, String.class),
+         
+    /** Container **/
     ATTACH_CONTAINER("containerattach", false, true,
          DockerConstants.DOCKER_CONTAINER_ID, String.class,
          DockerConstants.DOCKER_FOLLOW_STREAM, Boolean.class,
-         DockerConstants.DOCKER_TIMESTAMPS, Boolean.class,
-         DockerConstants.DOCKER_STD_OUT, Boolean.class,
-         DockerConstants.DOCKER_STD_ERR, Boolean.class,
-         DockerConstants.DOCKER_LOGS, Boolean.class), 
-    LOG_CONTAINER("containerlog", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class,
-         DockerConstants.DOCKER_FOLLOW_STREAM, Boolean.class,
-         DockerConstants.DOCKER_TIMESTAMPS, Boolean.class,
+         DockerConstants.DOCKER_LOGS, Boolean.class,
          DockerConstants.DOCKER_STD_OUT, Boolean.class,
          DockerConstants.DOCKER_STD_ERR, Boolean.class,
-         DockerConstants.DOCKER_TAIL, Integer.class,
-         DockerConstants.DOCKER_TAIL_ALL, Boolean.class),
-    CONTAINER_COPY_FILE("containercopyfile", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class,
-         DockerConstants.DOCKER_RESOURCE, String.class,
-         DockerConstants.DOCKER_HOST_PATH, String.class),
-    DIFF_CONTAINER("containerdiff", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class),
-    STOP_CONTAINER("containerstop", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class,
-         DockerConstants.DOCKER_TIMEOUT, Integer.class),
-    KILL_CONTAINER("containerkill", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class,
-         DockerConstants.DOCKER_SIGNAL, String.class),
-    RESTART_CONTAINER("containerrestart", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class,
-         DockerConstants.DOCKER_TIMEOUT, Integer.class),
-    TOP_CONTAINER("containertop", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class,
-         DockerConstants.DOCKER_TIMEOUT, Integer.class),    
-    TAG_IMAGE("imagetag", false, true,
-         DockerConstants.DOCKER_IMAGE_ID, String.class,
-         DockerConstants.DOCKER_REPOSITORY, String.class,
-         DockerConstants.DOCKER_FORCE, Boolean.class),
-    PAUSE_CONTAINER("containerpause", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class),
-    UNPAUSE_CONTAINER("containerunpause", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class),
-    BUILD_IMAGE("imagebuild", false, true,
-         DockerConstants.DOCKER_NO_CACHE, Boolean.class,
-         DockerConstants.DOCKER_REMOVE, Boolean.class,
-         DockerConstants.DOCKER_QUIET, Boolean.class),
+         DockerConstants.DOCKER_TIMESTAMPS, Boolean.class),
     COMMIT_CONTAINER("containercommit", false, true,
-         DockerConstants.DOCKER_CONTAINER_ID, String.class,
-         DockerConstants.DOCKER_REPOSITORY, String.class,
-         DockerConstants.DOCKER_TAG, String.class,
-         DockerConstants.DOCKER_MESSAGE, String.class,
-         DockerConstants.DOCKER_AUTHOR, String.class,
          DockerConstants.DOCKER_ATTACH_STD_ERR, Boolean.class,
          DockerConstants.DOCKER_ATTACH_STD_IN, Boolean.class,
          DockerConstants.DOCKER_ATTACH_STD_OUT, Boolean.class,
-         DockerConstants.DOCKER_PAUSE, Boolean.class,
+         DockerConstants.DOCKER_AUTHOR, String.class,
+         DockerConstants.DOCKER_CMD, String.class,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class,
+         DockerConstants.DOCKER_DISABLE_NETWORK, String.class,
          DockerConstants.DOCKER_ENV, String.class,
+         DockerConstants.DOCKER_EXPOSED_PORTS, String.class,
          DockerConstants.DOCKER_HOSTNAME, String.class,
          DockerConstants.DOCKER_MEMORY, Integer.class,
          DockerConstants.DOCKER_MEMORY_SWAP, Integer.class,
+         DockerConstants.DOCKER_MESSAGE, String.class,
          DockerConstants.DOCKER_OPEN_STD_IN, Boolean.class,
+         DockerConstants.DOCKER_PAUSE, Boolean.class,
          DockerConstants.DOCKER_PORT_SPECS, String.class,
+         DockerConstants.DOCKER_REPOSITORY, String.class,
          DockerConstants.DOCKER_STD_IN_ONCE, Boolean.class,
+         DockerConstants.DOCKER_TAG, String.class,
          DockerConstants.DOCKER_TTY, Boolean.class,
-         DockerConstants.DOCKER_WORKING_DIR, String.class),
-   CREATE_CONTAINER("containercreate", false, true,
-         DockerConstants.DOCKER_IMAGE_ID, String.class,
-         DockerConstants.DOCKER_NAME, String.class,
-         DockerConstants.DOCKER_WORKING_DIR, String.class,
-         DockerConstants.DOCKER_DISABLE_NETWORK, Boolean.class,
-         DockerConstants.DOCKER_HOSTNAME, String.class,
-         DockerConstants.DOCKER_PORT_SPECS, String.class,
          DockerConstants.DOCKER_USER, String.class,
-         DockerConstants.DOCKER_TTY, Boolean.class,
-         DockerConstants.DOCKER_STD_IN_OPEN, Boolean.class,
-         DockerConstants.DOCKER_STD_IN_ONCE, Boolean.class,
-         DockerConstants.DOCKER_MEMORY_LIMIT, Long.class,
-         DockerConstants.DOCKER_MEMORY_SWAP, Long.class,
-         DockerConstants.DOCKER_CPU_SHARES, Integer.class,
+         DockerConstants.DOCKER_VOLUMES, String.class,
+         DockerConstants.DOCKER_WORKING_DIR, String.class),
+    COPY_FILE_CONTAINER("containercopyfile", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class,
+         DockerConstants.DOCKER_HOST_PATH, String.class,
+         DockerConstants.DOCKER_RESOURCE, String.class),
+    CREATE_CONTAINER("containercreate", false, true,
+         DockerConstants.DOCKER_ATTACH_STD_ERR, Boolean.class,
          DockerConstants.DOCKER_ATTACH_STD_IN, Boolean.class,
          DockerConstants.DOCKER_ATTACH_STD_OUT, Boolean.class,
-         DockerConstants.DOCKER_ATTACH_STD_ERR, Boolean.class,
-         DockerConstants.DOCKER_ENV, String.class,
+         DockerConstants.DOCKER_CAP_ADD, String.class,
+         DockerConstants.DOCKER_CAP_DROP, String.class,
          DockerConstants.DOCKER_CMD, String.class,
+         DockerConstants.DOCKER_CPU_SHARES, Integer.class,
+         DockerConstants.DOCKER_DISABLE_NETWORK, Boolean.class,
          DockerConstants.DOCKER_DNS, String.class,
+         DockerConstants.DOCKER_ENTRYPOINT, String.class,
+         DockerConstants.DOCKER_ENV, String.class,
+         DockerConstants.DOCKER_EXPOSED_PORTS, String.class,
+         DockerConstants.DOCKER_HOST_CONFIG, String.class,
+         DockerConstants.DOCKER_HOSTNAME, String.class,
          DockerConstants.DOCKER_IMAGE, String.class,
-         DockerConstants.DOCKER_VOLUMES_FROM, String.class),   
+         DockerConstants.DOCKER_NAME, String.class,
+         DockerConstants.DOCKER_PORT_SPECS, String.class,
+         DockerConstants.DOCKER_STD_IN_OPEN, Boolean.class,
+         DockerConstants.DOCKER_STD_IN_ONCE, Boolean.class,
+         DockerConstants.DOCKER_TTY, Boolean.class,
+         DockerConstants.DOCKER_USER, String.class,
+         DockerConstants.DOCKER_VOLUMES, String.class,
+         DockerConstants.DOCKER_VOLUMES_FROM, String.class,
+         DockerConstants.DOCKER_WORKING_DIR, String.class),
+    DIFF_CONTAINER("containerdiff", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class),
+    INSPECT_CONTAINER("inspectcontainer", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class),
+    KILL_CONTAINER("containerkill", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class,
+         DockerConstants.DOCKER_SIGNAL, String.class),
+    LIST_CONTAINERS("containerlist", false, true,
+         DockerConstants.DOCKER_BEFORE, String.class,
+         DockerConstants.DOCKER_LIMIT, String.class,
+         DockerConstants.DOCKER_SHOW_ALL, Boolean.class,
+         DockerConstants.DOCKER_SHOW_SIZE, Boolean.class,
+         DockerConstants.DOCKER_SINCE, String.class),
+    LOG_CONTAINER("containerlog", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class,
+         DockerConstants.DOCKER_FOLLOW_STREAM, Boolean.class,
+         DockerConstants.DOCKER_STD_ERR, Boolean.class,
+         DockerConstants.DOCKER_STD_OUT, Boolean.class,
+         DockerConstants.DOCKER_TAIL, Integer.class,
+         DockerConstants.DOCKER_TAIL_ALL, Boolean.class,
+         DockerConstants.DOCKER_TIMESTAMPS, Boolean.class),
+    PAUSE_CONTAINER("containerpause", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class),
+    RESTART_CONTAINER("containerrestart", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class,
+         DockerConstants.DOCKER_TIMEOUT, Integer.class),
+    REMOVE_CONTAINER("containerremove", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class,
+         DockerConstants.DOCKER_FORCE, Boolean.class,
+         DockerConstants.DOCKER_REMOVE_VOLUMES, Boolean.class),
     START_CONTAINER("containerstart", false, true,
-         DockerConstants.DOCKER_PUBLISH_ALL_PORTS, Boolean.class,
-         DockerConstants.DOCKER_PRIVILEGED, Boolean.class,
-         DockerConstants.DOCKER_DNS, String.class,
-         DockerConstants.DOCKER_DNS_SEARCH, String.class,
+         DockerConstants.DOCKER_BINDS, String.class,
+         DockerConstants.DOCKER_CAP_ADD, String.class,
+         DockerConstants.DOCKER_CAP_DROP, String.class,
          DockerConstants.DOCKER_CONTAINER_ID, String.class,
-         DockerConstants.DOCKER_VOLUMES_FROM, String.class,
+         DockerConstants.DOCKER_DEVICES, String.class,
+         DockerConstants.DOCKER_DNS_SEARCH, String.class,
+         DockerConstants.DOCKER_DNS, String.class,
+         DockerConstants.DOCKER_LINKS, String.class,
+         DockerConstants.DOCKER_LXC_CONF, String.class,
          DockerConstants.DOCKER_NETWORK_MODE, String.class,
-         DockerConstants.DOCKER_CAP_ADD, String.class,
-         DockerConstants.DOCKER_CAP_DROP, String.class);
+         DockerConstants.DOCKER_PORTS, String.class,
+         DockerConstants.DOCKER_PORT_BINDINGS, String.class,
+         DockerConstants.DOCKER_PRIVILEGED, Boolean.class,
+         DockerConstants.DOCKER_PUBLISH_ALL_PORTS, Boolean.class,
+         DockerConstants.DOCKER_RESTART_POLICY, String.class,
+         DockerConstants.DOCKER_VOLUMES_FROM, String.class),
+    STOP_CONTAINER("containerstop", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class,
+         DockerConstants.DOCKER_TIMEOUT, Integer.class),
+    TOP_CONTAINER("containertop", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class,
+         DockerConstants.DOCKER_PS_ARGS, String.class),
+    UNPAUSE_CONTAINER("containerunpause", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class),
+    WAIT_CONTAINER("containerwait", false, true,
+         DockerConstants.DOCKER_CONTAINER_ID, String.class),
+         
+         
+    /** Exec **/
+    EXEC_CREATE("execcreate", false, true,
+         DockerConstants.DOCKER_ATTACH_STD_ERR, Boolean.class,
+         DockerConstants.DOCKER_ATTACH_STD_IN, Boolean.class,
+         DockerConstants.DOCKER_ATTACH_STD_OUT, Boolean.class,
+         DockerConstants.DOCKER_TTY, Boolean.class),
+    EXEC_START("execstart", false, true,
+         DockerConstants.DOCKER_DETACH, Boolean.class,
+         DockerConstants.DOCKER_EXEC_ID, String.class,
+         DockerConstants.DOCKER_TTY, Boolean.class);
     
     
     private String text;

http://git-wip-us.apache.org/repos/asf/camel/blob/fb9556df/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java
 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java
index bae90e7..49ae57a 100644
--- 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java
+++ 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/consumer/DockerEventsConsumer.java
@@ -80,7 +80,7 @@ public class DockerEventsConsumer extends DefaultConsumer 
implements EventCallba
     @Override
     protected void doStart() throws Exception {
         
-        eventsCmd = 
DockerClientFactory.getDockerClient(endpoint.getConfiguration(), 
null).eventsCmd(this);
+        eventsCmd = 
DockerClientFactory.getDockerClient(endpoint.getConfiguration(),null).eventsCmd(this);
         
         eventsCmd.withSince(String.valueOf(processInitialEvent()));
         eventsExecutorService =  eventsCmd.exec();

Reply via email to