Selenium 无法访问托管在另一个 Docker 容器中的网站

时间:2021-06-01 01:34:30

标签: docker selenium docker-compose

任何 docker、Selenium 专家,我都非常感谢您的帮助!

我有一个 Web 应用程序 (LNMP),我在本地使用 docker 作为开发环境。

现在,我正在尝试添加一个额外的 Selenium 容器,以便我可以将其用于自动化测试 (https://hub.docker.com/r/selenium/standalone-chrome-debug)。

我不知道如何设置从 Selenium 容器到我的应用程序容器 (Nginx) 的连接,因为网站没有发布。

在本地开发时,我使用测试域,并通过在本地编辑主机文件连接到网站。

例如

127.0.0.1 website.test

我已经尝试在 yaml 文件中添加 Selenium 容器,看起来是成功的,并且我能够使用来自主机的 VNC 客户端连接到容器。

但是当我尝试从 Selenium 浏览器访问网站时,我总是被拒绝连接。看起来 DNS 工作正常,否则 Chrome 会给我一个 DNS 错误而不是连接拒绝。

我的 yaml 文件看起来像你看到的,我添加了一个 Selenium 容器(browser_chrome)和一个网络(测试)。 app 是原始的 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"

这是没有Selenium设置的原始docker文件,https://github.com/markshust/docker-magento/blob/master/compose/docker-compose.yml,基本上,我添加了Selenium容器(browser_chrome)和网络(testing)来连接它们。

我只知道 docker 的基本知识,所以任何帮助将不胜感激!

:)

1 个答案:

答案 0 :(得分:1)

首先,您不必创建静态网络来处理这个问题,也不必让 docker 自行适应 = 将来会减少问题(至少这是我的意见)。通过不在撰写文件中指定 docker network,您离开 docker 以创建名为 default 的网络(从容器的角度来看),从主机的角度来看,称为 <stack-name>_default

您必须了解的第二件事是堆栈中两个容器之间的网络和连接是如何工作的 -> 此处对于容器之间的连接,您必须使用服务名称(在您的情况下为 app),因为 docker 会自动为它

这里是简单的compose文件来测试上面的有效性:

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