Docker部署k6,一条命令跑起性能测试环境
准备工作:先确认Docker环境
用Docker部署k6的前提是机器上已经安装了Docker。
如果你还没装,可以参考官方文档(Windows/Linux/macOS都有对应安装包)。
安装后打开终端,执行docker version确认版本号。
如果看到Client和Server信息,说明Docker正常运行。
注意:Docker Desktop在Windows/macOS上需要先启动。Linux下如果当前用户不在docker组,命令前加sudo。
拉取k6镜像并启动容器
k6官方镜像名为grafana/k6,一行命令就能完成拉取和运行:
docker pull grafana/k6
拉取完成后,可以用最简单的“hello world”测试容器是否正常:
docker run --rm -i grafana/k6 run --stdin <
这条命令会把脚本通过标准输入传给k6容器,容器内立刻执行一次虚拟用户访问。
如果看到类似✓的检查点和请求耗时输出,说明Docker部署k6成功。
关键点:--rm表示容器退出后自动删除,-i保持输入流打开。
实际使用中你更常用卷挂载的方式运行本地脚本。
编写脚本并挂载运行
把测试脚本保存到本地文件,比如test.js:
import http from 'k6/http';
import { check, sleep } from 'k6';
export default function () {
let res = http.get('https://httpbin.org/get');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(0.5);
}
然后通过挂载目录运行:
docker run --rm -i -v $(pwd):/scripts grafana/k6 run /scripts/test.js
这里$(pwd)是当前目录,Linux/macOS下有效;
Windows PowerShell用${PWD}。
脚本放在容器内的/scripts下,k6会读取执行。
如果测试目标在宿主机(如localhost),容器内无法直接访问本地网络。
解决方法:用--network=host(Linux)或替换为host.docker.internal(Windows/macOS)。
常见报错与避坑说明
报错1:docker: command not found
原因:Docker未安装或未加入PATH。请重新安装或手动添加路径。
报错2:Cannot connect to the Docker daemon
原因:Docker服务未运行。Linux下执行sudo systemctl start docker,Windows/macOS启动Docker Desktop。
报错3:k6 run - < script.js报错
如果你直接在容器内使用-从stdin读取脚本,请确保脚本内容用EOF包裹正确(参考上文第一条命令)。避免中文乱码或多余空格。
避坑提示:
- 镜像默认使用
--rm,容器退出后自动清理。如果想保留容器日志,去掉--rm并加上--name k6-test。 - 脚本路径要写对:挂载后容器内路径是
/scripts/你的文件名.js。 - 测试目标地址如果是内网服务,请确保容器网络模式能连通主机或直接使用
--network host。
验证部署是否成功
运行以下命令做一个简单的基准测试:
docker run --rm -i grafana/k6 run --vus 2 --duration 10s --stdin <
观察输出末尾的http_req_duration平均值和checks部分。
如果全部通过,Docker部署k6就彻底落地了。
你也可以用docker ps -a确认没有残留容器。
如果你的场景需要保存测试报告,可以用--out json=/results/report.json配合挂载目录实现。
小结
通过以上步骤你已经学会了如何用Docker部署k6并运行真实测试。
实际生产环境中,k6适合持续集成、自动化压测,配合InfluxDB+Grafana还能可视化结果。
遇到异常时优先检查Docker运行状态和网络模式,大多数问题都能快速定位。
如果你正在处理Docker部署k6,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。