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

问题描述 投票:0回答:2

[有一个用于预订航班的应用程序,我们的团队正在实施集成以与航班预订应用程序进行交互。因此,现在需要在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"
docker go docker-compose dockerfile docker-image
2个回答
2
投票

msg =“发布http://localhost:3000/v1/quote:拨打tcp 127.0.0.1:3000:connect:连接被拒绝无法获得响应“

您正在尝试连接到容器本身。使用主机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

在这种情况下,本地主机将表示主机本地主机。

如果您使用Mac,也可以使用host.docker.internal(不是首选方式)https://docs.docker.com/docker-for-mac/networking/


0
投票
  1. 在docker文件中公开适当的端口(端口,其他人将连接到您的服务)
EXPOSE 80
  1. 如果要在主机上访问启动的容器,则必须将该端口映射到主机。您可以使用docker命令执行此操作:
docker run -p 80:80 ....

或使用docker compose:

    ports:
      - '80:80'
© www.soinside.com 2019 - 2024. All rights reserved.