为了账号安全,请及时绑定邮箱和手机立即绑定

使用 http://localhost:port 在 docker 中运行 API 测试

使用 http://localhost:port 在 docker 中运行 API 测试

Go
浮云间 2022-05-10 13:35:09
有一个预订航班的应用程序,我们的团队正在实施集成以与航班预订应用程序进行交互。所以现在需要在 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/


查看完整回答
反对 回复 2022-05-10
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

  1. 在 docker 文件中公开适当的端口(端口,其他人将连接到您的服务)

EXPOSE 80
  1. 如果您想在主机上访问该启动的容器,您必须将该端口映射到您的主机。您可以使用 docker 命令执行此操作:

docker run -p 80:80 ....

或使用 docker compose:

    ports:
      - '80:80'


查看完整回答
反对 回复 2022-05-10
  • 2 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信