Fix: Add timeout to testDockerHost (#4097)

This commit is contained in:
Nelson Chan 2023-11-26 18:47:56 +08:00 committed by GitHub
parent 2ad8af9d14
commit b8bd17ddbd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,10 +1,10 @@
const axios = require("axios"); const axios = require("axios");
const { R } = require("redbean-node"); const { R } = require("redbean-node");
const version = require("../package.json").version;
const https = require("https"); const https = require("https");
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const Database = require("./database"); const Database = require("./database");
const { axiosAbortSignal } = require("./util-server");
class DockerHost { class DockerHost {
@ -70,9 +70,11 @@ class DockerHost {
static async testDockerHost(dockerHost) { static async testDockerHost(dockerHost) {
const options = { const options = {
url: "/containers/json?all=true", url: "/containers/json?all=true",
timeout: 5000,
headers: { headers: {
"Accept": "*/*", "Accept": "*/*",
}, },
signal: axiosAbortSignal(6000),
}; };
if (dockerHost.dockerType === "socket") { if (dockerHost.dockerType === "socket") {
@ -82,26 +84,33 @@ class DockerHost {
options.httpsAgent = new https.Agent(DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL)); options.httpsAgent = new https.Agent(DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL));
} }
let res = await axios.request(options); try {
let res = await axios.request(options);
if (Array.isArray(res.data)) { if (Array.isArray(res.data)) {
if (res.data.length > 1) { if (res.data.length > 1) {
if ("ImageID" in res.data[0]) {
return res.data.length;
} else {
throw new Error("Invalid Docker response, is it Docker really a daemon?");
}
if ("ImageID" in res.data[0]) {
return res.data.length;
} else { } else {
throw new Error("Invalid Docker response, is it Docker really a daemon?"); return res.data.length;
} }
} else { } else {
return res.data.length; throw new Error("Invalid Docker response, is it Docker really a daemon?");
}
} catch (e) {
if (e.code === "ECONNABORTED" || e.name === "CanceledError") {
throw new Error("Connection to Docker daemon timed out.");
} else {
throw e;
} }
} else {
throw new Error("Invalid Docker response, is it Docker really a daemon?");
} }
} }
/** /**