diff options
6 files changed, 40 insertions, 14 deletions
diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java index 8f074a4ece..c97494d470 100644 --- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java +++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java @@ -1750,7 +1750,9 @@ public class DockerConnection throw new DockerException(DockerMessages.getFormattedString( "DockerStartContainer.error", getCmdString(containerInfo))); //$NON-NLS-1$ } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { - throw new DockerException(e.message()); + if (e.status() != 304) { + throw new DockerException(e.getMessage()); + } } catch (com.spotify.docker.client.exceptions.DockerException e) { throw new DockerException(e.getMessage(), e.getCause()); } @@ -1795,7 +1797,9 @@ public class DockerConnection throw new DockerException(DockerMessages.getFormattedString( "DockerStartContainer.error", getCmdString(containerInfo))); //$NON-NLS-1$ } catch (com.spotify.docker.client.exceptions.DockerRequestException e) { - throw new DockerException(e.message()); + if (e.status() != 304) { + throw new DockerException(e.getMessage()); + } } catch (com.spotify.docker.client.exceptions.DockerException e) { throw new DockerException(e); } diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java index 06a5b14a7a..919ab15ca1 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java @@ -290,8 +290,9 @@ public class ContainerLauncher { for (String volume : volumes) { boolean excluded = false; for (String dir : excludedDirs) { - if (volume.startsWith(dir) && volume.charAt( - dir.length()) == File.separatorChar) { + if (volume.equals(dir) || (volume.startsWith(dir) + && volume.charAt(dir + .length()) == File.separatorChar)) { excluded = true; break; } @@ -1696,6 +1697,7 @@ public class ContainerLauncher { remoteDataVolumes.remove(readonly); } return new ContainerCommandProcess(connection, imageName, containerId, + null, remoteDataVolumes, keepContainer); } diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/RunImageCommandHandler.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/RunImageCommandHandler.java index 56520df349..a129d2d4ea 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/RunImageCommandHandler.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/commands/RunImageCommandHandler.java @@ -13,6 +13,8 @@ package org.eclipse.linuxtools.internal.docker.ui.commands; import static org.eclipse.linuxtools.internal.docker.ui.commands.CommandUtils.getRunConsole; +import java.io.OutputStream; + import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.runtime.CoreException; @@ -21,6 +23,8 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.model.RuntimeProcess; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.linuxtools.docker.core.DockerContainerNotFoundException; import org.eclipse.linuxtools.docker.core.DockerException; @@ -33,6 +37,7 @@ import org.eclipse.linuxtools.docker.core.IDockerImage; import org.eclipse.linuxtools.docker.ui.Activator; import org.eclipse.linuxtools.internal.docker.core.DockerConnection; import org.eclipse.linuxtools.internal.docker.ui.consoles.RunConsole; +import org.eclipse.linuxtools.internal.docker.ui.launch.ContainerCommandProcess; import org.eclipse.linuxtools.internal.docker.ui.launch.LaunchConfigurationUtils; import org.eclipse.linuxtools.internal.docker.ui.views.DVMessages; import org.eclipse.linuxtools.internal.docker.ui.wizards.ImageRun; @@ -69,7 +74,7 @@ public class RunImageCommandHandler extends AbstractHandler { .getDockerContainerConfig(); final IDockerHostConfig hostConfig = wizard .getDockerHostConfig(); - runImage(selectedImage, containerConfig, + runImage(selectedImage, containerConfig, null, hostConfig, wizard.getDockerContainerName(), wizard.removeWhenExits()); } @@ -91,6 +96,7 @@ public class RunImageCommandHandler extends AbstractHandler { */ public static void runImage(final IDockerImage image, final IDockerContainerConfig containerConfig, + final ILaunch launch, final IDockerHostConfig hostConfig, final String containerName, final boolean removeWhenExits) { final IDockerConnection connection = image.getConnection(); @@ -140,14 +146,21 @@ public class RunImageCommandHandler extends AbstractHandler { startContainerMonitor.beginTask(DVMessages .getString("RunImageStartingContainerTask.msg"), 1); //$NON-NLS-1$ console = getRunConsole(connection, container); + OutputStream outputStream = null; if (console != null) { // if we are auto-logging, show the console console.showConsole(); - ((DockerConnection) connection).startContainer( - containerId, console.getOutputStream()); - } else { - ((DockerConnection) connection) - .startContainer(containerId, null); + outputStream = console.getOutputStream(); + } + // Start the Container and create a process we can wrap with + // a RuntimeProcess and set into the ILaunch + ContainerCommandProcess commandProcess = new ContainerCommandProcess( + connection, container.image(), containerId, + outputStream, null, + true); + if (launch != null) { + new RuntimeProcess(launch, commandProcess, + container.name(), null); } startContainerMonitor.done(); // create a launch configuration from the container diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/consoles/RunConsole.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/consoles/RunConsole.java index b9e2bdc3d6..b5d6ffe79f 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/consoles/RunConsole.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/consoles/RunConsole.java @@ -198,13 +198,17 @@ public class RunConsole extends IOConsole { } else { // notify any console listener that there is no more output // going to follow - out.notifyConsoleListeners(new byte[] { 0 }, 0, 0); + if (out != null) { + out.notifyConsoleListeners(new byte[] { 0 }, 0, 0); + } } } catch (Exception e) { Activator.log(e); // notify any console listener that there is no more output // going to follow - out.notifyConsoleListeners(new byte[] { 0 }, 0, 0); + if (out != null) { + out.notifyConsoleListeners(new byte[] { 0 }, 0, 0); + } } }); t.start(); diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java index fca3163677..d02194de61 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java @@ -60,6 +60,7 @@ public class ContainerCommandProcess extends Process { public ContainerCommandProcess(IDockerConnection connection, String imageName, String containerId, + OutputStream outputStream, Map<String, String> remoteVolumes, boolean keepContainer) { this.connection = connection; @@ -80,7 +81,7 @@ public class ContainerCommandProcess extends Process { .getOperationToken()) { pipedOut = pipedStdout; pipedErr = pipedStderr; - connection.startContainer(containerId, null); + connection.startContainer(containerId, outputStream); threadStarted = true; ((DockerConnection) connection).attachLog(token, containerId, pipedStdout, pipedStderr); @@ -213,7 +214,8 @@ public class ContainerCommandProcess extends Process { containerRemoved = true; connection.removeContainer(containerId); } - if (!((DockerConnection) connection).isLocal()) { + if (!((DockerConnection) connection).isLocal() + && remoteVolumes != null && !remoteVolumes.isEmpty()) { CopyVolumesFromImageJob job = new CopyVolumesFromImageJob( connection, imageName, remoteVolumes); job.schedule(); diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunDockerImageLaunchConfigurationDelegate.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunDockerImageLaunchConfigurationDelegate.java index 2f0913b94a..bdeae5dd0f 100644 --- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunDockerImageLaunchConfigurationDelegate.java +++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/RunDockerImageLaunchConfigurationDelegate.java @@ -65,6 +65,7 @@ public class RunDockerImageLaunchConfigurationDelegate final IDockerImage image = getDockerImage(config, connection); RunImageCommandHandler.runImage(image, containerConfig, + launch, hostConfig, config.getAttribute( IRunDockerImageLaunchConfigurationConstants.CONTAINER_NAME, |