Update docker.js

This commit is contained in:
Louis Lam 2023-12-04 20:46:57 +08:00
parent 21a6b4a131
commit 2f5a6d9648
3 changed files with 17 additions and 9 deletions

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 https = require("https"); const https = require("https");
const fs = require("fs"); const fs = require("fs/promises");
const path = require("path"); const path = require("path");
const Database = require("./database"); const Database = require("./database");
const { axiosAbortSignal } = require("./util-server"); const { axiosAbortSignal, fileExists } = require("./util-server");
class DockerHost { class DockerHost {
@ -81,7 +81,7 @@ class DockerHost {
options.socketPath = dockerHost.dockerDaemon; options.socketPath = dockerHost.dockerDaemon;
} else if (dockerHost.dockerType === "tcp") { } else if (dockerHost.dockerType === "tcp") {
options.baseURL = DockerHost.patchDockerURL(dockerHost.dockerDaemon); options.baseURL = DockerHost.patchDockerURL(dockerHost.dockerDaemon);
options.httpsAgent = new https.Agent(DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL)); options.httpsAgent = new https.Agent(await DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL));
} }
try { try {
@ -143,7 +143,7 @@ class DockerHost {
* @param {string} url The docker host URL rewritten to https:// * @param {string} url The docker host URL rewritten to https://
* @returns {object} HTTP agent options * @returns {object} HTTP agent options
*/ */
static getHttpsAgentOptions(dockerType, url) { static async getHttpsAgentOptions(dockerType, url) {
let baseOptions = { let baseOptions = {
maxCachedSessions: 0, maxCachedSessions: 0,
rejectUnauthorized: true rejectUnauthorized: true
@ -156,10 +156,10 @@ class DockerHost {
let certPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameCert); let certPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameCert);
let keyPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameKey); let keyPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameKey);
if (dockerType === "tcp" && fs.existsSync(caPath) && fs.existsSync(certPath) && fs.existsSync(keyPath)) { if (dockerType === "tcp" && await fileExists(caPath) && await fileExists(certPath) && await fileExists(keyPath)) {
let ca = fs.readFileSync(caPath); let ca = await fs.readFile(caPath);
let key = fs.readFileSync(keyPath); let key = await fs.readFile(keyPath);
let cert = fs.readFileSync(certPath); let cert = await fs.readFile(certPath);
certOptions = { certOptions = {
ca, ca,
key, key,

View file

@ -740,7 +740,7 @@ class Monitor extends BeanModel {
} else if (dockerHost._dockerType === "tcp") { } else if (dockerHost._dockerType === "tcp") {
options.baseURL = DockerHost.patchDockerURL(dockerHost._dockerDaemon); options.baseURL = DockerHost.patchDockerURL(dockerHost._dockerDaemon);
options.httpsAgent = CacheableDnsHttpAgent.getHttpsAgent( options.httpsAgent = CacheableDnsHttpAgent.getHttpsAgent(
DockerHost.getHttpsAgentOptions(dockerHost._dockerType, options.baseURL) await DockerHost.getHttpsAgentOptions(dockerHost._dockerType, options.baseURL)
); );
} }

View file

@ -1,3 +1,5 @@
import fs from "fs";
const tcpp = require("tcp-ping"); const tcpp = require("tcp-ping");
const ping = require("@louislam/ping"); const ping = require("@louislam/ping");
const { R } = require("redbean-node"); const { R } = require("redbean-node");
@ -1096,3 +1098,9 @@ module.exports.axiosAbortSignal = (timeoutMs) => {
} }
} }
}; };
module.exports.fileExists = (file) => {
return fs.promises.access(file, fs.constants.F_OK)
.then(() => true)
.catch(() => false);
};