diff --git a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java index fe2329290..829ebf8ee 100644 --- a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java @@ -20,6 +20,9 @@ public interface ExecCreateCmd extends SyncDockerCmd { @CheckForNull Boolean hasTtyEnabled(); + @CheckForNull + String getUser(); + ExecCreateCmd withAttachStderr(Boolean attachStderr); ExecCreateCmd withAttachStdin(Boolean attachStdin); @@ -32,6 +35,8 @@ public interface ExecCreateCmd extends SyncDockerCmd { ExecCreateCmd withTty(Boolean tty); + ExecCreateCmd withUser(String user); + interface Exec extends DockerCmdSyncExec { } diff --git a/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java index 14da4626a..fc8bf1c0b 100644 --- a/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java @@ -26,6 +26,12 @@ public class ExecCreateCmdImpl extends AbstrDockerCmd 0); } + + @Test(groups = "ignoreInCircleCi", expectedExceptions = NotFoundException.class) + public void execStartWithNonExistentUser() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(true).withCmd("touch", "/execStartTest.log").withUser("NonExistentUser").exec(); + dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withTty(true) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + + dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); + } }