在 docker 上使用 k6 测试本地主机站点

Chi*_*tus 6 windows localhost docker k6

我的计算机上有一个应用程序在 localhost:1235 上运行,我正在尝试对其进行负载测试。

我为docker安装了k6容器来测试它,但当然从docker的性质来看,我的容器有不同的localhost。我试图理解要做什么。

我运行以下命令: docker run -it --rm --net=host -v c:/users/k6:/k6 loadimpact/k6 run /k6/script

我在某处读到 --net=host 在 Windows 上不起作用,对吗?如何找到主机IP?

我尝试按照本教程运行: http://blog.michaelhamrah.com/2014/06/accessing-the-docker-host-server-within-a-container/

我找到的IP 172.17.0.1 在我的测试中不起作用。

我也尝试添加-p 1235:1235但失败了,我猜docker尝试绑定这个端口并转发到它。

预先致谢,柴姆

小智 11

在您的 k6 脚本中,使用 urlhost.docker.internal来访问主机上运行的内容。

例如,访问主机上运行的服务http://localhost:8080

// script.js
import http from "k6/http";
import { sleep } from "k6";

export default function () {
  http.get("http://host.docker.internal:8080");
  sleep(1);
}

Run Code Online (Sandbox Code Playgroud)

然后在 Windows 或 Mac 上可以使用以下命令运行:

$ docker run -i loadimpact/k6 run - <script.js
Run Code Online (Sandbox Code Playgroud)

对于linux你需要一个额外的标志

$ docker run --add-host=host.docker.internal:host-gateway -i loadimpact/k6 run - <script.js
Run Code Online (Sandbox Code Playgroud)

参考:


Rag*_*nar 0

docker 实例内的 k6 应该能够连接到主机上的“公共”IP - 在以太网或 Wifi 接口上配置的 IP。您可以执行 aipconfig /all查看所有接口及其 IP。

在我的 Mac 上我可以这样做: $ python httpserv.py & [1] 7824 serving at port 8000 $ ifconfig en1 en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether b8:09:8a:bb:f7:ed inet6 fe80::148f:5671:5297:fc24%en1 prefixlen 64 secured scopeid 0x5 inet 192.168.0.107 netmask 0xffffff00 broadcast 192.168.0.255 nd6 options=201<PERFORMNUD,DAD> media: autoselect status: active $ echo 'import http from "k6/http"; export default function() { let res = http.get("http://192.168.0.107:8000"); console.log(res.status); };' |docker run -i loadimpact/k6 run -

即,我在主机的端口 8000 上启动一个简单的 HTTP 服务器,然后执行 k6 docker 映像并告诉它根据主机上物理的、向外的 en1 接口的 IP 地址访问 URL。就您的情况而言,在 Windows 上,您可以使用ipconfig来查找面向外部的 IP。