madmaker
@madmaker
Full stack программист

Как запустить codeception тесты в webdriver на docker, чтобы chrome видел проект не по 172.20.0.8, а по имени хоста, прописанному в extra_hosts?

Я запускаю acceptance тест на codeception.
Использую webdriver browser: chrome.

Проблема в том, что у меня несколько доменов, которые не видит хром внутри контейнера.
То есть по host.docker.internal, по IP контейнера nginx 172.20.08 открывается проект, но нужно, чтобы открывался по имени домена.
Домены в конфигах прокинуты. Если заходить внутрь контейнера (docker exec -it), то curl по именам доменов работает корректно.
Хром к контейнерам подключается - по IP-то работает. Значит с сетью все норм.
Но при этом как только подключаюсь по имени домена из хром, то валит ошибку "This site cant' be reached. ERR_CONNECTION_REFUSED"

Мои конфиги:

docker-compose.yml
version: '3.3'
networks:
  mynetworkname:
    ipam:
      config:
        - subnet: 172.20.0.0/24
services:
  nginx:
    container_name: my-nginx
    image: nginx:1.18
    ports:
      - 80:80
      - 443:443
    restart: always
    volumes:
      - ./:/srv/localhost/src/
      - ./docker-nginx/ssl-params.conf:/etc/nginx/snippets/ssl-params.conf
      - ./docker-nginx/self-signed.conf:/etc/nginx/snippets/self-signed.conf
      - ./docker-nginx/nginx-selfsigned.crt:/etc/ssl/certs/nginx-selfsigned.crt
      - ./docker-nginx/nginx-selfsigned.key:/etc/ssl/private/nginx-selfsigned.key
      - ./docker-nginx/dhparam.pem:/etc/nginx/dhparam.pem

      - ./docker-nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker-nginx/conf.d:/etc/nginx/conf.d
      - ./logs/nginx:/var/log/nginx
    depends_on:
      - php
    networks:
      mynetworkname:
        ipv4_address: "172.20.0.8"
    extra_hosts:
      - "site0.localhost:172.20.0.8"
      - "site1localhost:172.20.0.8"
      - "php:172.20.0.9"
      - "mariadb:172.20.0.10"
  php:
    container_name: my-php
    build: docker-php
    restart: always
    image: php:7.4-fpm
    volumes:
      - ./:/srv/localhost/src/
      - ./logs/php:/var/log
    expose:
      - 9001
      - 9000
    depends_on:
      - mariadb
    networks:
      mynetworkname:
        ipv4_address: "172.20.0.9"
    extra_hosts:
      - "site0.localhost:172.20.0.8"
      - "site1localhost:172.20.0.8"
      - "php:172.20.0.9"
      - "mariadb:172.20.0.10"

  mariadb:
    container_name: my-mariadb
    image: mariadb:10.3
    restart: always
    volumes:
      - ./docker-mysql/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: XXXX
    ports:
      - 33061:3306
    networks:
      mynetworkname:
        ipv4_address: "172.20.0.10"
    extra_hosts:
      - "site0.localhost:172.20.0.8"
      - "site1localhost:172.20.0.8"
      - "php:172.20.0.9"
      - "mariadb:172.20.0.10"

  phpmyadmin:
    container_name: pma
    image: phpmyadmin/phpmyadmin
    ports:
      - 8080:80
    environment:
      MYSQL_ROOT_PASSWORD: XXXXX
      PMA_HOST: mariadb
      PMA_PORT: 3306
    depends_on:
      - mariadb
    networks:
      mynetworkname:
        ipv4_address: "172.20.0.11"
    extra_hosts:
      - "site0.localhost:172.20.0.8"
      - "site1localhost:172.20.0.8"
      - "php:172.20.0.9"
      - "mariadb:172.20.0.10"
  selenium-hub:
    image: selenium/hub:3.12.0-cobalt
    container_name: selenium-hub
    ports:
      - 4444:4444
    networks:
      - mynetworkname
    extra_hosts:
      - "site0.localhost:172.20.0.8"
      - "site1localhost:172.20.0.8"
      - "php:172.20.0.9"
      - "mariadb:172.20.0.10"
  chrome:
    image: selenium/node-chrome:3.12.0-cobalt
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
    networks:
      - mynetworkname
    extra_hosts:
      - "site0.localhost:172.20.0.8"
      - "site1localhost:172.20.0.8"
      - "php:172.20.0.9"
      - "mariadb:172.20.0.10"


acceptance.suite.yml

class_name: AcceptanceTester
modules:
  enabled:
    - WebDriver:
#        url: https://172.20.0.8:443 - работает
       #url: https://site1.localhost:443 - не работает. Валит ошибку
        url: http://host.docker.internal/
        host: selenium-hub
        browser: chrome
        capabilities:
          acceptInsecureCerts: true # allow self-signed certificates
  • Вопрос задан
  • 250 просмотров
Решения вопроса 1
madmaker
@madmaker Автор вопроса
Full stack программист
Стоило отчаяться и написать сюда, как решение настигло меня.
Проблема была в именах доменов, заканчивающихся на localhost.
Заменил все на .local и заработало.
Как я понял, дело в docker - для него domainname.localhost - это что-то особенное. Суффикс .localhost обрабатывается по-своему.
Я не знал...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы