Dockercompose не может получить доступ, используя имя хоста - PullRequest
0 голосов
/ 20 декабря 2018

Я довольно новичок в докере, но пытаюсь использовать docker compose для запуска тестов автоматизации с моим приложением.

Мне удалось настроить docker compose для запуска моего приложения и запустить мои тесты автоматизации, однако в данный момент мое приложение работает на localhost, когда мне нужно, чтобы оно работало с определенным доменом example.com.

Из исследования докера кажется, что вы должны иметь возможность поразить приложение по имени хоста, установив его в links, но я все еще не могу.

Нижекод для моих файлов создания докеров ...

docker-compose.yml

abc:
  build: ./
  command: run container-dev
  ports:
    - "443:443"
  expose:
    - "443"

docker-compose.automation.yml

tests:
  build: test/integration/
  dockerfile: DockerfileUIAuto
  command: sh -c "Xvfb :1 -screen 0 1024x768x16 &>xvfb.log && sleep 20 && DISPLAY=:1.0 && ENVIRONMENT=qa BASE_URL=https://example.com npm run automation"
  links:
    - abc:example.com
  volumes:
    - /tmp:/tmp/

и используюследующая команда для запуска ...

docker-compose -p tests -f docker-compose.yml -f docker-compose.automation.yml up --build

Есть ли что-то, чего мне не хватает для сопоставления example.com с localhost?

1 Ответ

0 голосов
/ 20 декабря 2018

Если два контейнера находятся в одной и той же внутренней сети 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 - не единственный инструмент, который у вас есть.

...