diff --git a/components/camel-docker/src/generated/resources/org/apache/camel/component/docker/docker.json b/components/camel-docker/src/generated/resources/org/apache/camel/component/docker/docker.json index d68855f1ac019..3d9d8497d187c 100644 --- a/components/camel-docker/src/generated/resources/org/apache/camel/component/docker/docker.json +++ b/components/camel-docker/src/generated/resources/org/apache/camel/component/docker/docker.json @@ -121,6 +121,7 @@ "CamelDockerStdInOpen": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "With StdIn in open flag", "constantName": "org.apache.camel.component.docker.DockerConstants#DOCKER_STD_IN_OPEN" }, "CamelDockerVolumesFrom": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "VolumesFrom or VolumesFrom[]", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "With volumes from", "constantName": "org.apache.camel.component.docker.DockerConstants#DOCKER_VOLUMES_FROM" }, "CamelDockerDomainName": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "With domain name", "constantName": "org.apache.camel.component.docker.DockerConstants#DOCKER_DOMAIN_NAME" }, + "CamelDockerBinds": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Bind or Bind[]", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "With binds", "constantName": "org.apache.camel.component.docker.DockerConstants#DOCKER_BINDS" }, "CamelDockerCapAdd": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Capability or Capability[]", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "With cap add", "constantName": "org.apache.camel.component.docker.DockerConstants#DOCKER_CAP_ADD" }, "CamelDockerCapDrop": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Capability or Capability[]", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "With cap drop", "constantName": "org.apache.camel.component.docker.DockerConstants#DOCKER_CAP_DROP" }, "CamelDockerNetwork": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The network name", "constantName": "org.apache.camel.component.docker.DockerConstants#DOCKER_NETWORK" }, 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 f87965755a11e..88145836f2b23 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 @@ -280,11 +280,12 @@ public final class DockerConstants { public static final String DOCKER_VOLUMES_FROM = "CamelDockerVolumesFrom"; @Metadata(description = "With domain name", javaType = "String") public static final String DOCKER_DOMAIN_NAME = "CamelDockerDomainName"; + @Metadata(description = "With binds", javaType = "Bind or Bind[]") + public static final String DOCKER_BINDS = "CamelDockerBinds"; /** * Start Container * */ - public static final String DOCKER_BINDS = "CamelDockerBinds"; @Metadata(description = "With cap add", javaType = "Capability or Capability[]") public static final String DOCKER_CAP_ADD = "CamelDockerCapAdd"; @Metadata(description = "With cap drop", javaType = "Capability or Capability[]") diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/producer/DockerProducer.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/producer/DockerProducer.java index ef36915d993f7..ff6ce16ec01b4 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/producer/DockerProducer.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/producer/DockerProducer.java @@ -49,6 +49,7 @@ import com.github.dockerjava.api.command.UnpauseContainerCmd; import com.github.dockerjava.api.command.VersionCmd; import com.github.dockerjava.api.model.AuthConfig; +import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Capability; import com.github.dockerjava.api.model.ExposedPort; import com.github.dockerjava.api.model.ExposedPorts; @@ -845,6 +846,12 @@ private CreateContainerCmd executeCreateContainerRequest(DockerClient client, Me createContainerCmd.withVolumes(volume); } + Bind[] binds = DockerHelper.getArrayProperty(DockerConstants.DOCKER_BINDS, message, Bind.class); + + if (binds != null) { + createContainerCmd.getHostConfig().withBinds(binds); + } + VolumesFrom[] volumesFrom = DockerHelper.getArrayProperty(DockerConstants.DOCKER_VOLUMES_FROM, message, VolumesFrom.class); diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateContainerCmdHeaderTest.java index c6ee1de63cce1..07b08d707ebee 100644 --- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateContainerCmdHeaderTest.java +++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateContainerCmdHeaderTest.java @@ -19,6 +19,7 @@ import java.util.Map; import com.github.dockerjava.api.command.CreateContainerCmd; +import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Capability; import com.github.dockerjava.api.model.ExposedPort; import com.github.dockerjava.api.model.HostConfig; @@ -31,12 +32,11 @@ import org.mockito.Mockito; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; /** * Validates Create Container Request headers are parsed properly */ -public class CreateContainerCmdHeaderTest extends BaseDockerHeaderTest { +class CreateContainerCmdHeaderTest extends BaseDockerHeaderTest { @Mock private CreateContainerCmd mockObject; @@ -73,6 +73,7 @@ void createContainerHeaderTest() { String[] entrypoint = new String[] { "sleep", "9999" }; String portSpecs = "80"; String dns = "8.8.8.8"; + Bind bind = Bind.parse("/Users/foo/apps/:/apps:ro"); Map headers = getDefaultParameters(); headers.put(DockerConstants.DOCKER_IMAGE, image); @@ -102,15 +103,16 @@ void createContainerHeaderTest() { headers.put(DockerConstants.DOCKER_PORT_SPECS, portSpecs); headers.put(DockerConstants.DOCKER_DNS, dns); headers.put(DockerConstants.DOCKER_DOMAIN_NAME, domainName); + headers.put(DockerConstants.DOCKER_BINDS, bind); Mockito.when(mockObject.getHostConfig()).thenReturn(hostConfig); template.sendBodyAndHeaders("direct:in", "", headers); Mockito.verify(dockerClient, Mockito.times(1)).createContainerCmd(image); - Mockito.verify(mockObject, Mockito.times(1)).withExposedPorts(eq(exposedPort)); - Mockito.verify(mockObject, Mockito.times(1)).withTty(eq(tty)); - Mockito.verify(mockObject, Mockito.times(1)).withName(eq(name)); + Mockito.verify(mockObject, Mockito.times(1)).withExposedPorts(exposedPort); + Mockito.verify(mockObject, Mockito.times(1)).withTty(tty); + Mockito.verify(mockObject, Mockito.times(1)).withName(name); Mockito.verify(mockObject, Mockito.times(1)).withWorkingDir(workingDir); Mockito.verify(mockObject, Mockito.times(1)).withNetworkDisabled(disableNetwork); Mockito.verify(mockObject, Mockito.times(1)).withHostName(hostname); @@ -129,6 +131,7 @@ void createContainerHeaderTest() { Mockito.verify(mockObject, Mockito.times(1)).withDomainName(domainName); Mockito.verify(hostConfig, Mockito.times(1)).withVolumesFrom(volumesFromContainer); + Mockito.verify(hostConfig, Mockito.times(1)).withBinds(bind); Mockito.verify(hostConfig, Mockito.times(1)).withCapAdd(capAdd); Mockito.verify(hostConfig, Mockito.times(1)).withCapDrop(capDrop); Mockito.verify(hostConfig, Mockito.times(1)).withDns(dns);