3.1 KiB
3.1 KiB
網絡配置說明
🐳 Docker 容器訪問主機服務
當 API 服務器在主機上運行,而 k6 測試在 Docker 容器內運行時,需要配置網絡讓容器能夠訪問主機上的服務。
✅ 已配置的解決方案
本測試架構已經配置為使用主機網絡模式(--network host),容器可以直接訪問主機上的服務。
配置說明
- Makefile:所有
docker run命令都添加了--network host參數 - docker-compose.yml:k6 服務使用
network_mode: host
使用方式
# 如果 API 在本地主機運行(localhost)
export BASE_URL=http://localhost:8888
# 或
export BASE_URL=https://localhost:8888
# 運行測試
make smoke-health
🔧 其他網絡配置選項
選項 1: 使用 host.docker.internal(僅限 macOS/Windows)
在 macOS 和 Windows 上,Docker Desktop 提供了 host.docker.internal 主機名:
export BASE_URL=http://host.docker.internal:8888
make smoke-health
注意:在 Linux 上,host.docker.internal 默認不可用,需要額外配置。
選項 2: 使用主機 IP 地址
如果知道主機的 IP 地址,可以直接使用:
# 獲取主機 IP 地址
ip addr show | grep "inet " | grep -v 127.0.0.1
# 使用主機 IP
export BASE_URL=http://192.168.1.100:8888
make smoke-health
選項 3: 使用 Docker 網絡(如果 API 也在容器中)
如果 API 服務器也在 Docker 容器中運行,可以使用 Docker 網絡:
# docker-compose.yml
services:
api:
# ... API 配置
k6:
# ... k6 配置
networks:
- test-network
extra_hosts:
- "host.docker.internal:host-gateway"
📝 常見問題
Q: 為什麼使用 --network host?
A: --network host 是最簡單可靠的方式,讓容器直接使用主機網絡,可以訪問 localhost 和主機上的所有端口。
Q: 使用 --network host 有什麼限制?
A:
- 容器無法使用端口映射(因為直接使用主機端口)
- 在 macOS/Windows 上,
--network host可能不工作(需要使用host.docker.internal)
Q: 如何測試連接?
A: 在容器內測試連接:
# 進入容器
docker run -it --rm --network host grafana/k6:latest sh
# 在容器內測試連接
curl http://localhost:8888/api/v1/health
Q: HTTPS 證書問題?
A: 如果使用 HTTPS 但沒有有效證書,可以設置:
export K6_SKIP_TLS_VERIFY=true
make smoke-health
或在測試文件中設置:
export const options = {
// ...
insecureSkipTLSVerify: true,
};
🚀 快速測試
測試本地 API
# 1. 確認 API 在本地運行
curl http://localhost:8888/api/v1/health
# 2. 設置 BASE_URL
export BASE_URL=http://localhost:8888
# 3. 運行測試
make smoke-health
測試遠程 API
# 1. 設置遠程 API 地址
export BASE_URL=https://api.example.com
# 2. 運行測試
make smoke-health