Контейнер Docker не может получить доступ к локальному хосту с определенным портом

#docker #docker-compose #cypress #vue-cli

Вопрос:

Заранее скажу, что мои навыки докера невелики, поэтому приношу извинения, если ответ очевиден.

TLDR: Локальный веб-сайт, для доступа к которому мне нужно указать порт, как разрешить контейнеру docker доступ к этому веб-сайту?

Подробная информация:

У меня есть два веб-сайта, которые я запускаю локально:

  • Первое-это localapp.company.com это сайт IIS
  • Другой-это localnewapp.company.com это выполняется локально vue-cli-service serve и может быть доступно только путем указания порта localnewapp.company.com:8081

Я пытаюсь распараллелить наши тесты cypress с помощью контейнеров docker, где {IPv4_ADDRESS} = Мой локальный IP-адрес, вот мой файл docker-compose.yml:

 version: '3.2'

services:
  cypress:
    build: .
    working_dir: /e2e
    extra_hosts:
       localnewapp.company.com: {IPv4_ADDRESS}
       localapp.company.com: {IPv4_ADDRESS}
    entrypoint: cypress run --headless --browser chrome --config-file ./cypress.json --record --key {KEY} --parallel --ci-build-id ${GITHUB_RUN_ID}
    volumes:
      - ./:/e2e
 

Cypress может запускать тесты, предназначенные для localapp, но не для localnewapp.

Используя интерфейс командной строки Docker, я попытался запустить:

  • curl localapp.company.com который возвращает действительный ответ.
  • curl localnewapp.company.com:8081 не удается подключиться.

Не знаю, куда отсюда идти. Любые предложения будут высоко оценены.


Редактировать: Просто чтобы уточнить, локально используется порт 8081 node.exe , который обслуживает веб-сайт локально.

Ответ №1:

Вам нужно будет предоставить порт из своей cypress службы

 ports:
- HOST_PORT:CONTAINER_PORT
 

Нравится:

 version: '3.2' 
  services:
    cypress:
      ..
      volumes:
      - ./:/e2e
      ports:
      - 8081:8080
 

смотрите документацию

Комментарии:

1. Спасибо @dnltinney, я попробовал это и получаю следующую ошибку: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:8081: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

2. Скорее всего, порт 8081 используется. Вы можете проверить это с помощью nc -zv localhost 8081 . Вы пробовали другой порт ?

3. Порт 8081 используется localnewapp.company.com который запускается локально с помощью команды vue-cli-service serve , поэтому он используется с node.exe