You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Node实现Docker容器的自动化创建?

基于Node.js实现Docker容器自动化创建方案

前置准备

  • 本地/目标主机已安装Docker并启动Daemon服务
  • 已配置Node.js 14+ 运行环境
  • 推荐使用官方维护的Docker Node.js SDK dockerode 完成操作,无需调用底层shell命令

实现步骤

1. 安装依赖

执行npm命令安装SDK:
npm install dockerode

2. 初始化Docker连接实例

const Docker = require('dockerode');
// 本地Docker默认套接字连接(Linux/macOS)
const docker = new Docker({ socketPath: '/var/run/docker.sock' });
// Windows环境替换为如下路径
// const docker = new Docker({ socketPath: '//./pipe/docker_engine' });

// 如需连接远程Docker服务,配置认证参数即可:
// const docker = new Docker({
//   host: '你的Docker主机IP',
//   port: 2376,
//   ca: fs.readFileSync('ca.pem'),
//   cert: fs.readFileSync('cert.pem'),
//   key: fs.readFileSync('key.pem')
// });

3. 拉取基础镜像(可选,本地不存在对应镜像时需执行)

async function pullImage(imageName) {
  const stream = await docker.pull(imageName);
  // 等待镜像拉取完成
  await new Promise((resolve, reject) => {
    docker.modem.followProgress(stream, (err, res) => err ? reject(err) : resolve(res));
  });
  console.log(`镜像 ${imageName} 拉取完成`);
}
// 调用示例:拉取nginx最新版镜像
// await pullImage('nginx:latest');

4. 创建并启动容器

async function createAndStartContainer() {
  // 先拉取镜像(本地已有可跳过)
  await pullImage('nginx:latest');
  
  // 创建容器,可根据需求自定义配置
  const container = await docker.createContainer({
    Image: 'nginx:latest', // 使用的镜像名
    name: 'auto-create-nginx-demo', // 自定义容器名,可选
    Env: ['NODE_ENV=production', 'PORT=80'], // 传入容器的环境变量,可选
    ExposedPorts: { '80/tcp': {} }, // 声明暴露的端口
    HostConfig: {
      PortBindings: { '80/tcp': [{ HostPort: '8080' }] }, // 端口映射:宿主机8080映射容器80
      Binds: ['/本地/宿主机目录:/usr/share/nginx/html'], // 目录挂载,可选
      RestartPolicy: { Name: 'always' }, // 重启策略,可选
      Memory: 512 * 1024 * 1024, // 内存限制512M,可选
      CpuShares: 512 // CPU权重,可选
    }
  });

  // 启动容器
  await container.start();
  console.log(`容器 ${container.id} 已成功启动`);
  return container.id;
}

// 调用执行
createAndStartContainer().catch(console.error);

常用扩展操作

  • 查看容器详情:调用container.inspect()可获取容器IP、运行状态、端口映射等全部信息
  • 停止容器:调用container.stop()
  • 删除容器:先停止后调用container.remove()
  • 执行容器内命令:调用container.exec()可执行容器内部的shell命令

注意事项

  • 权限问题:运行Node.js进程的用户需要有Docker套接字的访问权限,否则会抛出连接错误,可将用户加入docker用户组,或测试时使用sudo执行脚本
  • 生产环境优化:上线使用时建议增加镜像合法性校验、容器配置参数校验、错误重试逻辑,同时避免直接暴露Docker远程端口,配置TLS认证保障安全
  • 资源隔离:生产环境必须配置CPU、内存等资源限制,避免单个容器占用全部宿主机资源

内容的提问来源于stack exchange,提问作者Tockstown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:09:00