Запускать тесты API в docker, используя http://localhost: порт - PullRequest
0 голосов
/ 23 января 2020

Существует приложение для бронирования рейсов, и наша команда внедряет интеграцию для взаимодействия с приложением бронирования авиабилетов. Поэтому сейчас необходимо протестировать их API в среде CI. Поэтому я создал Dockerfile в моей среде тестирования API:

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

Я попытался построить и запустить интеграционные тесты, используя localhost. Локально я могу сделать это без использования docker. Но внутри docker я не могу использовать локальную ссылку интеграции для вызова их конечных точек. Есть ли способ сделать это? Это сообщение об ошибке, которое я получаю:

msg="Post http://localhost:3000/v1/quote: dial tcp 127.0.0.1:3000: connect: connection refusedUnable to get response"

Ответы [ 2 ]

2 голосов
/ 23 января 2020

msg = "Сообщение http://localhost: 3000 / v1 / цитата : набрать tcp 127.0.0.1:3000: соединение: соединение отклонено, невозможно получить ответ"

Вы пытаетесь подключиться к самому контейнеру. Использовать IP-адрес хоста или network_mode: "host"

UPD

Вы можете узнать ip своего хоста с помощью ip route | awk '/default/ { print $3 }', а затем использовать этот ip в переменной среды URL .

Или вы можете избавиться от сетевой изоляции контейнера при любой настройке network_mode: "host" в docker -compose.yml (хотя это и не рекомендуется)

https://docs.docker.com/compose/compose-file/#network_mode

В этом случае localhost будет обозначать хост-хост localhost.

Также вы можете использовать host.docker.internal, если вы используете Ma c (не рекомендуется) https://docs.docker.com/docker-for-mac/networking/

0 голосов
/ 23 января 2020
  1. В docker файле выставить соответствующий порт (порт, к которому будут подключаться другие)
EXPOSE 80
Если вы хотите получить доступ к этому запущенному контейнеру на хост-машине, вам нужно сопоставить этот порт с хост-машиной. Вы делаете это с помощью команды docker:
docker run -p 80:80 ....

или docker compose:

    ports:
      - '80:80'
...