Docker运行K6脚本出现ModuleSpecifier错误如何解决?
问题原因及解决步骤
1. 修复K6脚本挂载与路径错误
你遇到的两次报错本质都是脚本及依赖文件没有被k6容器正确识别:
- 第一次用
- <K6-script.js的stdin传入方式仅支持无外部依赖的单文件脚本,你脚本引用的libs、K6文件夹没有进入容器,所以会报模块找不到的错误。 - 第二次已经正确挂载了本地目录到容器的
/src路径,但执行时直接写K6-script.js没有指定容器内的绝对路径,k6找不到文件就会默认当成远程模块发起请求,触发第二次报错。
正确操作逻辑是:挂载包含脚本、依赖文件夹的整个本地目录到容器内固定路径,执行时指定容器内的脚本绝对路径即可。
2. 修复InfluxDB访问问题
首先明确:浏览器访问http://localhost:8086返回404属于正常现象,InfluxDB 1.8的8086端口是API服务端口,没有默认Web UI,不需要处理这个问题。
需要修改的是k6命令里的InfluxDB地址:你在容器内写localhost:8086访问的是k6容器自身的8086端口,而非宿主机上运行的InfluxDB服务。Windows/Mac系统下的Docker Desktop可以用host.docker.internal代替localhost指向宿主机,Linux系统可以在命令中加--net=host参数保持localhost访问。
另外需要提前创建myk6db数据库,否则k6无法写入数据:你可以在宿主机命令行执行curl -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE myk6db"完成库创建。
3. 最终执行命令
Windows/Mac系统使用以下命令:
docker run -v //c/loadtesting:/src loadimpact/k6 run --out influxdb=http://host.docker.internal:8086/myk6db /src/K6-script.js
Linux系统使用以下命令:
docker run --net=host -v /home/你的本地路径/loadtesting:/src loadimpact/k6 run --out influxdb=http://localhost:8086/myk6db /src/K6-script.js
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

