in src/common/utility.ts [682:743]
public static async checkDockerState(outputChannel: vscode.OutputChannel) {
let state: DockerState;
let errorMsg: any;
try {
await Executor.executeCMD(outputChannel, "docker", { shell: true }, "version");
state = DockerState.Running;
} catch (error) {
errorMsg = error;
const platform: string = os.platform();
if (platform === "win32") {
if (error.message.indexOf(Constants.commandNotFoundErrorMsgPatternOnWindows) > -1) {
state = DockerState.NotInstalled;
} else if (error.message.indexOf(Constants.dockerNotRunningErrorMsgPatternOnWindows) > -1) {
state = DockerState.NotRunning;
} else {
state = DockerState.Unknown;
}
} else if (platform === "linux" || platform === "darwin") {
if (error.errorCode === 127 || error.message.indexOf(Constants.commandNotFoundErrorMsgPatternOnLinux) > -1 || error.message.match(/Command '.*?' not found/)) {
state = DockerState.NotInstalled;
} else if (error.message.indexOf(Constants.dockerNotRunningErrorMsgPatternOnLinux) > -1) {
state = DockerState.NotRunning;
} else if (Constants.permissionDeniedErrorMsgPatternOnLinux) {
state = DockerState.PermissionDenied;
} else {
state = DockerState.Unknown;
}
} else {
state = DockerState.Unknown;
}
}
if (errorMsg) {
const install: vscode.MessageItem = { title: Constants.InstallDocker };
const troubleshooting: vscode.MessageItem = { title: Constants.TroubleShooting };
const cancel: vscode.MessageItem = { title: Constants.Cancel };
let input: vscode.MessageItem;
let helpUrl: string;
let items: vscode.MessageItem[];
switch (state) {
case DockerState.NotInstalled:
items = [install, cancel];
input = await vscode.window.showWarningMessage(Constants.dockerNotInstalledErrorMsg, ...items);
if (input === install) {
helpUrl = Constants.installDockerUrl;
}
break;
case DockerState.NotRunning:
case DockerState.Unknown:
items = [troubleshooting, cancel];
input = await vscode.window.showWarningMessage(Constants.dockerNotRunningErrorMsg, ...items);
if (input === troubleshooting) {
helpUrl = Constants.troubleShootingDockerUrl;
}
break;
}
if (input === troubleshooting || input === install) {
await vscode.commands.executeCommand("vscode.open", vscode.Uri.parse(helpUrl));
}
}
}