Предоставить Selenoid приложение, работающее на хост-порту. - PullRequest
0 голосов
/ 10 марта 2020

Я запускаю скрипт автоматизации тестирования приложений Selenoid и хотел бы запустить этот скрипт для локального приложения. Тем не менее, я не могу найти, как открыть мое локальное приложение (работающее на порту 8787) для Selenoid. Я нашел следующую ветку , обсуждающую подобную проблему, но она не решает мою проблему. Связанный поток описывает использование IP-адреса хоста. Однако я хочу сделать свою тестовую систему независимой. IP-адрес хоста различен для каждой системы, и его трудно получить независимо от системы.

Я уже пытался добавить поле expose в мой docker файл компоновки:

version: '3'
services:
  selenoid:
    network_mode: bridge
    image: aerokube/selenoid:latest-release
    volumes:
      - "${PWD}/run:/etc/selenoid"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "${PWD}/run/video:/opt/selenoid/video"
      - "${PWD}/run/logs:/opt/selenoid/logs"
    environment:
      - OVERRIDE_VIDEO_OUTPUT_DIR=${PWD}/run/video
      - TZ=Europe/Amsterdam
    command: ["-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs"]
    ports:
      - "4444:4444"
    expose:
      - "8787"

Однако , это не работает, потому что docker контейнеры, созданные Selenoid, не передаются той же опции.

Есть ли способ выставить мой порт хоста 8787 моему контейнеру Selenoid в system / os независимым способом (либо через конфигурацию в файле docker-compose.yml, возможность, переданную удаленному драйверу, либо любым другим способом?)?

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Я наконец понял, что да, приложение, которое я запускаю, фактически выполняется в контейнере Docker и, таким образом, связать их так же просто, как поместить Selenoid и приложение в одну и ту же сеть Docker. Финал docker-compose.yml выглядит следующим образом:

version: '3'
networks:
  my_network_name:
    external:
      name: my_network_name # This assumes network is already created
services:
  selenoid:
    networks:
      my_network_name: null
    image: aerokube/selenoid:latest-release
    volumes:
      - "${PWD}/run:/etc/selenoid"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "${PWD}/run/video:/opt/selenoid/video"
      - "${PWD}/run/logs:/opt/selenoid/logs"
    environment:
      - OVERRIDE_VIDEO_OUTPUT_DIR=${PWD}/run/video
      - TZ=Europe/Amsterdam
    command: ["-container-network", "my_network_name", "-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs"]
    ports:
      - "4444:4444"
    expose:
      - "8787"
1 голос
/ 11 марта 2020

Selenoid запускает браузеры в стандартных Docker контейнерах, поэтому все, что применимо к Docker, применимо к браузерам Selenoid. Docker был создан для случая, когда все взаимодействующие части упакованы в контейнеры, и в этом случае у вас есть устаревшие Docker ссылки или современные Docker пользовательские сети. Если вы все еще хотите запустить свое приложение на хост-машине без упаковки в контейнер, вам нужно либо указать IP-адрес хост-машины пользователя, либо на некоторых платформах Docker предоставляет конкретное доменное имя, например, docker.for.mac.localhost на Ma c.

...