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)
参考:
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。
| 归档时间: |
|
| 查看次数: |
6418 次 |
| 最近记录: |