[有一个用于预订航班的应用程序,我们的团队正在实施集成以与航班预订应用程序进行交互。因此,现在需要在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 =“发布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/
EXPOSE 80
docker run -p 80:80 ....
或使用docker compose:
ports:
- '80:80'