#docker #selenium #docker-compose
Вопрос:
Любой докер, эксперт по Селену, я был бы признателен вам за помощь!
У меня есть веб-приложение(LNMP), и я использую docker в своей локальной среде разработки в качестве разработчика.
Теперь я пытаюсь добавить дополнительный контейнер Selenium, чтобы использовать его для автоматического тестирования (https://hub.docker.com/r/selenium/standalone-chrome-debug).
Я не мог понять, как настроить соединение из контейнера Selenium с контейнером моего приложения(Nginx), потому что веб-сайт не опубликован.
Когда я разрабатываю в своем локальном, я использую тестовый домен и подключаюсь к веб-сайту, редактируя файл хоста в своем локальном.
напр.
127.0.0.1 website.test
Я попытался добавить контейнер Selenium в файл yaml, похоже, это было успешно, и я могу использовать клиент VNC с хоста для подключения к контейнеру.
Но мне всегда отказывали в подключении, когда я пытался получить доступ к веб-сайту из браузера Selenium. Похоже, DNS работает, иначе Chrome выдал бы мне ошибку DNS, а не отказ в подключении.
Мой файл yaml выглядит так, как вы можете видеть, я добавил контейнер Selenium(browser_chrome) и сеть(тестирование). приложение является оригинальным контейнером Nginx.
networks:
testing:
version: "3"
services:
browser_chrome:
image: selenium/standalone-chrome-debug:3.8.1
ports:
- "5900:5900"
networks:
- testing
app:
networks:
testing:
aliases:
- "website.test"
Это исходный файл docker без установки Selenium, https://github.com/markshust/docker-magento/blob/master/compose/docker-compose.yml, в основном, я добавил контейнер Selenium(browser_chrome) и сеть(тестирование) для их подключения.
Я знаю только основные вещи докера, поэтому буду признателен за любую помощь!
🙂
Ответ №1:
Прежде всего, вам не нужно создавать статическую сеть для работы с этим и оставлять docker, чтобы он соответствовал ей сам = меньше проблем в будущем (по крайней мере, таково мое мнение). Не указывая сеть docker в файле compose, вы оставляете docker для создания сети с именем default
(точка зрения контейнера), с точки зрения хоста называемой <stack-name>_default
Второе, что вам нужно понять, — это как работает сеть и соединение между двумя контейнерами в стеке — > Здесь для соединения между контейнерами вы должны использовать имена служб (в вашем случае> app
), так как docker автоматически создает для него записи DNS
Вот простой файл для создания, чтобы проверить правильность вышеизложенного:
version: "3"
services:
server:
image: containous/whoami
client:
image: appropriate/curl
command: "curl -vvv http://server"
И вывод из журналов консоли и служб
$ docker stack deploy -c docker-compose.yml test
Creating network test_default
Creating service test_server
Creating service test_client
$ docker service logs -f test_client
test_client.1.fv8dq5b80dkk@... | * Rebuilt URL to: http://server/
test_client.1.fv8dq5b80dkk@... | % Total % Received % Xferd Average Speed Time Time Time Current
test_client.1.fv8dq5b80dkk@... | Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 10.0.5.2...
test_client.1.fv8dq5b80dkk@... | * TCP_NODELAY set
test_client.1.fv8dq5b80dkk@... | * Connected to server (10.0.5.2) port 80 (#0)
test_client.1.fv8dq5b80dkk@... | > GET / HTTP/1.1
test_client.1.fv8dq5b80dkk@... | > Host: server
test_client.1.fv8dq5b80dkk@... | > User-Agent: curl/7.59.0
test_client.1.fv8dq5b80dkk@... | > Accept: */*
test_client.1.fv8dq5b80dkk@... | >
test_client.1.fv8dq5b80dkk@... | < HTTP/1.1 200 OK
test_client.1.fv8dq5b80dkk@... | < Date: Tue, 01 Jun 2021 09:54:21 GMT
test_client.1.fv8dq5b80dkk@... | < Content-Length: 162
test_client.1.fv8dq5b80dkk@... | < Content-Type: text/plain; charset=utf-8
test_client.1.fv8dq5b80dkk@... | <
test_client.1.fv8dq5b80dkk@... | { [162 bytes data]
test_client.1.fv8dq5b80dkk@... | Hostname: 7d91b392ac0a
test_client.1.fv8dq5b80dkk@... | IP: 127.0.0.1
test_client.1.fv8dq5b80dkk@... | IP: 10.0.5.3
test_client.1.fv8dq5b80dkk@... | IP: 172.18.0.4
test_client.1.fv8dq5b80dkk@... | RemoteAddr: 10.0.5.4:45600
test_client.1.fv8dq5b80dkk@... | GET / HTTP/1.1
test_client.1.fv8dq5b80dkk@... | Host: server
test_client.1.fv8dq5b80dkk@... | User-Agent: curl/7.59.0
test_client.1.fv8dq5b80dkk@... | Accept: */*
test_client.1.fv8dq5b80dkk@... |
100 162 100 162 0 0 23142 0 --:--:-- --:--:-- --:--:-- 27000
test_client.1.fv8dq5b80dkk@... | * Connection #0 to host server left intact
Комментарии:
1. Спасибо за ваш ответ, я смог использовать app:8443 для подключения к приложению Nginx, но я был перенаправлен на website.test в браузере и получил ошибку DNS, в которой говорилось, что домен не может быть разрешен. если мне нужно использовать домен для тестирования, как я могу настроить DNS?
2. давай, приятель … настройка nginx выходит за рамки вашего вопроса. Еще дальше-настройка DNS-сервера. Прежде всего, вы должны овладеть базовыми функциями сети и докера. Не начинайте с конца. На данный момент используйте IP:ПОРТ для проверки функциональности
3. Мой вопрос в том, должен ли я использовать домен для доступа к веб-сайту, как я могу настроить DNS между контейнером Selenium и Nginx. Я попытался использовать имя контейнера, основываясь на вашем комментарии, это позволило мне подключиться к контейнеру Nginx.