如何使用docknode输入MySQL密码

How to use docknode to enter MySQL password

提问人:cc shen 提问时间:11/13/2023 更新时间:11/13/2023 访问量:16

问:

一些代码:

const stream = require("stream");
const streamPromises = require("stream/promises");
const Docker = require("dockerode");
const moment = require("moment");

const docker = new Docker();

async function exec(container, cmd, opts) {
  const dockerExec = await container.exec({
    ...opts,
    AttachStderr: true,
    AttachStdout: true,
    AttachStdin: true,
    Cmd: cmd,
    Tty: true,
  });

  const dockerExecStream = await dockerExec.start({
    hijack: true,
    stdin: true,
  });
  dockerExecStream.pipe(process.stdout);

  dockerExecStream.on("data", (data) => {
    dockerExecStream.write(Buffer.from("123456"));
    dockerExecStream.end();
  });
  dockerExecStream.on("error", (e, ...args) => {
    console.log("exec error:", e, ...args);
  });

  const stdoutStream = new stream.PassThrough();
  const stderrStream = new stream.PassThrough();

  docker.modem.demuxStream(dockerExecStream, stdoutStream, stderrStream);

  dockerExecStream.resume();

  await streamPromises.finished(dockerExecStream);

  const stderr = stderrStream.read();
  const stdout = stdoutStream.read();

  const dockerExecInfo = await dockerExec.inspect();

  return {
    exitCode: dockerExecInfo.ExitCode,
    stderr: stderr?.toString(),
    stdout: stdout?.toString(),
  };
}

const fileName = `backup${moment().format("YYYYMMDDHHmmss")}.sql`;
const inContainerPath = "/home";
const cmd = `mysqldump -u ${username} -p ${database} -c > ${inContainerPath}/${fileName}`;
const mysqlContainer = docker.getContainer("mysql.Id");
const res = await exec(mysqlContainer, [...cmd.split(" ")]);
console.log(res);

如何自动输入MySQL密码并成功运行?

注意:

我以前试过这个命令,如果在代码中运行,就会被MySQL拒绝。它可以使用 cmd 工具执行mysqldump --user="root" --password="123456" satcd -c > /home/backup20231113164033.sql

错误代码:

mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Got error: 1045: Access denied for user '"root"'@'localhost' (using password: YES) when trying to connect

我不想通过my.cnf配置进行修改。我该怎么办

MySQL 节点.js dockerode

评论


答: 暂无答案