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

标签 docker go docker-compose dockerfile docker-image

有一个用于预订航类的应用程序,我们的团队正在实现集成以与航类预订应用程序进行交互。因此,现在需要在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/

相关文章:

multithreading - 如何在 Redis 6 docker 库中启用 tls/ssl?

ruby-on-rails - Postgresql DB 未在 docker 中连接

go - 如何从结构中指定我们想要使用的字段?

docker - docker run vs. docker-compose up:相同的图像,不同的结果

docker - 从已经运行的Docker容器中保存工件

Docker 构建 - mmap() 失败 : [12] Cannot allocate memory (Using Apple M1 chip)

go - ide在$ GOPATH中找不到软件包shim和proto软件包

arrays - 为什么两个相同的字符串变量不相等?是因为字节数组大小吗?

docker - Kompose功能类似于docker-compose链接

python - 将运行在 docker 上的应用程序生成的文件保存到主机中的给定路径