有一个用于预订航类的应用程序,我们的团队正在实现集成以与航类预订应用程序进行交互。因此,现在需要在CI环境中测试其API。
因此,我在API测试框架中创建了一个Dockerfile:
FROM golang:1.13 ADD . /app WORKDIR /app RUN go mod download CMD ["make", "test", "$URL=", "$INTEGRATION=", "$TESTTYPE=", "$TAGS="]
而且我还在集成库中创建了一个docker-compose.yml文件,我应该对其进行测试:
version: '3' services: tests: image: int-tests:latest environment: - URL=http://localhost:3000/ - INTEGRATION=pitane - TESTTYPE=integration - TAGS=quotes
我尝试使用本地主机构建和运行集成测试。在本地,我无需使用docker就可以做到。但是在docker内部,我无法使用集成的localhost链接调用其端点。有什么办法吗?
这是我收到的错误消息:
msg="Post http://localhost:3000/v1/quote: dial tcp 127.0.0.1:3000: connect: connection refusedUnable to get response"
最佳答案
msg="Post http://localhost:3000/v1/quote: dial tcp 127.0.0.1:3000: connect: connection refusedUnable to get response"
您正在尝试连接到容器本身。使用主机IP地址或
network_mode: "host"
UPD
您可以使用
ip route | awk '/default/ { print $3 }'
找出您的主机IP,然后在URL
环境变量中使用该IP。或者您可以在docker-compose.yml中的所有设置
network_mode: "host"
处摆脱容器的网络隔离(不过不是首选方式)https://docs.docker.com/compose/compose-file/#network_mode
在这种情况下,localhost将表示主机localhost。
如果您使用的是Mac,也可以使用
host.docker.internal
(不是首选方式)https://docs.docker.com/docker-for-mac/networking/
关于docker - 使用http ://localhost:port在Docker中运行API测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59876785/