Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ public interface StartContainerCmd extends DockerCmd<Void> {

public Ports getPortBindings();

public boolean isPublishAllPorts();
public Boolean isPublishAllPorts();

public boolean isPrivileged();
public Boolean isPrivileged();

public String[] getDns();

Expand Down Expand Up @@ -70,9 +70,9 @@ public interface StartContainerCmd extends DockerCmd<Void> {
*/
public StartContainerCmd withPortBindings(PortBinding... portBindings);

public StartContainerCmd withPrivileged(boolean privileged);
public StartContainerCmd withPrivileged(Boolean privileged);

public StartContainerCmd withPublishAllPorts(boolean publishAllPorts);
public StartContainerCmd withPublishAllPorts(Boolean publishAllPorts);

/**
* Set custom DNS servers
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.github.dockerjava.core.command;

import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY;

import org.apache.commons.lang.builder.ToStringBuilder;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.dockerjava.api.NotFoundException;
import com.github.dockerjava.api.NotModifiedException;
Expand All @@ -22,15 +25,17 @@
/**
* Start a container
*/
@JsonInclude(NON_EMPTY)
public class StartContainerCmdImpl extends AbstrDockerCmd<StartContainerCmd, Void> implements StartContainerCmd {

@JsonIgnore
private String containerId;

@JsonProperty("Binds")
private Binds binds = new Binds();
private Binds binds;

@JsonProperty("Links")
private Links links = new Links();
private Links links;

@JsonProperty("LxcConf")
private LxcConf[] lxcConf;
Expand All @@ -39,10 +44,10 @@ public class StartContainerCmdImpl extends AbstrDockerCmd<StartContainerCmd, Voi
private Ports portBindings;

@JsonProperty("PublishAllPorts")
private boolean publishAllPorts;
private Boolean publishAllPorts;

@JsonProperty("Privileged")
private boolean privileged;
private Boolean privileged;

@JsonProperty("Dns")
private String[] dns;
Expand All @@ -54,7 +59,7 @@ public class StartContainerCmdImpl extends AbstrDockerCmd<StartContainerCmd, Voi
private String volumesFrom;

@JsonProperty("NetworkMode")
private String networkMode = "bridge";
private String networkMode;

@JsonProperty("Devices")
private Device[] devices;
Expand All @@ -76,13 +81,13 @@ public StartContainerCmdImpl(StartContainerCmd.Exec exec, String containerId) {
@Override
@JsonIgnore
public Bind[] getBinds() {
return binds.getBinds();
return (binds == null) ? new Bind[0] : binds.getBinds();
}

@Override
@JsonIgnore
public Link[] getLinks() {
return links.getLinks();
return (links == null) ? new Link[0] : links.getLinks();
}

@Override
Expand All @@ -96,12 +101,12 @@ public Ports getPortBindings() {
}

@Override
public boolean isPublishAllPorts() {
public Boolean isPublishAllPorts() {
return publishAllPorts;
}

@Override
public boolean isPrivileged() {
public Boolean isPrivileged() {
return privileged;
}

Expand Down Expand Up @@ -192,13 +197,13 @@ public StartContainerCmd withPortBindings(PortBinding... portBindings) {
}

@Override
public StartContainerCmd withPrivileged(boolean privileged) {
public StartContainerCmd withPrivileged(Boolean privileged) {
this.privileged = privileged;
return this;
}

@Override
public StartContainerCmd withPublishAllPorts(boolean publishAllPorts) {
public StartContainerCmd withPublishAllPorts(Boolean publishAllPorts) {
this.publishAllPorts = publishAllPorts;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static com.github.dockerjava.api.model.AccessMode.ro;
import static com.github.dockerjava.api.model.Capability.*;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.equalTo;
Expand Down Expand Up @@ -386,4 +387,55 @@ public void startContainerWithRestartPolicy() throws DockerException {
is(equalTo(restartPolicy)));
}

@Test
public void existingHostConfigIsPreservedByBlankStartCmd() throws DockerException {

String dnsServer = "8.8.8.8";

// prepare a container with custom DNS
CreateContainerResponse container = dockerClient
.createContainerCmd("busybox")
.withDns(dnsServer)
.withCmd("true").exec();

LOG.info("Created container {}", container.toString());

assertThat(container.getId(), not(isEmptyString()));

// start container _without_any_customization_ (important!)
dockerClient.startContainerCmd(container.getId()).exec();

InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container
.getId()).exec();

// The DNS setting survived.
assertThat(inspectContainerResponse.getHostConfig().getDns(), is(notNullValue()));
assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()),
contains(dnsServer));
}

@Test
public void existingHostConfigIsResetByConfiguredStartCmd() throws DockerException {

String dnsServer = "8.8.8.8";

// prepare a container with custom DNS
CreateContainerResponse container = dockerClient
.createContainerCmd("busybox")
.withDns(dnsServer)
.withCmd("true").exec();

LOG.info("Created container {}", container.toString());

assertThat(container.getId(), not(isEmptyString()));

// modify another setting in start command. Leave DNS unchanged.
dockerClient.startContainerCmd(container.getId()).withPublishAllPorts(true).exec();

InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container
.getId()).exec();

// although start did not modify DNS Settings, they were reset to their default.
assertThat(inspectContainerResponse.getHostConfig().getDns(), is(nullValue(String[].class)));
}
}