4

我在 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/

我发现 172.17.0.1 的 IP 在我的测试中不起作用。

我也尝试添加-p 1235:1235但失败了,我猜码头工人试图绑定这个端口并转发给它。

提前致谢, 柴姆

4

2 回答 2

6

在您的 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);
}

然后在 windows 或 mac 上可以运行:

$ docker run -i loadimpact/k6 run - <script.js

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

$ docker run --add-host=host.docker.internal:host-gateway -i loadimpact/k6 run - <script.js

参考:

于 2020-09-25T10:43:16.200 回答
0

docker 实例中的 k6 应该能够连接到主机上的“公共”IP - 在以太网或 Wifi 接口上配置的 IP。您可以ipconfig /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。

于 2017-10-24T11:08:49.057 回答