有一个预订航班的应用程序,我们的团队正在实施集成以与航班预订应用程序进行交互。所以现在需要在 CI 环境中测试他们的 API。因此,我在我的 API 测试框架中创建了一个 Dockerfile:FROM golang:1.13ADD . /appWORKDIR /appRUN go mod downloadCMD ["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我尝试使用 localhost 构建和运行集成测试。在本地,我可以在不使用 docker 的情况下做到这一点。但是在 docker 内部,我不能使用集成的 localhost 链接来调用他们的端点。有什么办法吗?这是我收到的错误消息:msg="Post http://localhost:3000/v1/quote: dial tcp 127.0.0.1:3000: connect: connection refusedUnable to get response"
2 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
msg="发布http://localhost:3000/v1/quote : 拨打 tcp 127.0.0.1:3000: connect: connection refusedUnable to get response"
您正在尝试连接到容器本身。使用主机 IP 地址或network_mode: "host"
UPD
您可以找到您的主机 ip,ip route | awk '/default/ { print $3 }'
然后在URL
环境变量中使用此 ip。
network_mode: "host"
或者您可以在 docker-compose.yml中的所有设置中摆脱容器的网络隔离(虽然不是首选方式)
https://docs.docker.com/compose/compose-file/#network_mode
在这种情况下,localhost 将表示主机 localhost。
host.docker.internal
如果您使用 Mac(不是首选方式), 也可以使用https://docs.docker.com/docker-for-mac/networking/
一只甜甜圈
TA贡献1836条经验 获得超5个赞
在 docker 文件中公开适当的端口(端口,其他人将连接到您的服务)
EXPOSE 80
如果您想在主机上访问该启动的容器,您必须将该端口映射到您的主机。您可以使用 docker 命令执行此操作:
docker run -p 80:80 ....
或使用 docker compose:
ports: - '80:80'
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消