Если два контейнера находятся в одной и той же внутренней сети Docker, Docker предоставит службу DNS, где один может общаться с другим только по имени контейнера.Когда вы показываете это с двумя отдельными docker-compose.yml
файлами, это немного сложно, потому что Docker Compose хочет изолировать каждый файл в свой отдельный мир мини-Docker.
Первый шаг - явно объявитьсеть в «первом» docker-compose.yml
файле.По умолчанию Docker Compose автоматически создает сеть для вас, но вам нужно контролировать ее имя, чтобы вы могли ссылаться на нее из других источников.Это означает, что вам нужен блок networks:
верхнего уровня, а также для присоединения контейнера к сети.
version: '3'
networks:
abc:
name: abc
services:
abc:
build: ./
command: run container-dev
ports:
- "443:443"
networks:
abc:
aliases:
- example.com
Затем в тестовом файле вы можете импортировать его как external network.
version: 3
networks:
abc:
external: true
name: abc
services:
tests:
build: test/integration/
dockerfile: DockerfileUIAuto
command: sh -c "Xvfb :1 -screen 0 1024x768x16 &>xvfb.log && sleep 20 && npm run automation"
environment:
DISPLAY: "1.0"
ENVIRONMENT: qa
BASE_URL: "https://example.com"
networks:
- abc
Учитывая сложность того, что вы показываете для "тестового" контейнера, я бы настоятельно рекомендовал запустить его не в Docker или написать сценарий оболочки, запускающий X-сервер,проверяет, что оно действительно началось, а затем запускает тест.Файл docker-compose.yml
- не единственный инструмент, который у вас есть.