docker 容器中的 python jupyter notebook 连接到

我使用以下docker-compose.yml命令运行基于jupyter/datascience-notebook:87210526f381和 的jupyter notebook selenium/node-chrome:


    version: '3'

    services:

    selenium-hub:

        image: selenium/hub:3.141.59-dubnium

        container_name: selenium-hub

        ports:

        - "4444:4444"

    chrome:

        image: selenium/node-chrome:3.141.59-dubnium

        volumes:

        - /dev/shm:/dev/shm

        depends_on:

        - selenium-hub

        environment:

        - HUB_HOST=selenium-hub

        - HUB_PORT=4444

        networks: 

        - backend

    nbdatascience: 

        container_name: nbdatascience

        image: aabor/nbdatascience

        build: nbdatascience/.

        volumes:

        - /home/$USER/py:/home/jovyan/work/py

        - /home/$USER/.jupyter:/home/jovyan/.jupyter

        ports:

        - "10000:8888"

        environment:

        - TZ="Europe/Kiev"

        restart: always

        networks: 

        - backend

        depends_on:

        - chrome

    networks: 

    backend:

        driver: bridge

当 selenium hub 上的所有这些容器都可以访问时http://localhost:4444/,jupyter 实验室在http://localhost:10000/lab.


我正在尝试从执行以下 python 脚本的笔记本打开 Web 浏览器会话:


from selenium import webdriver

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

cap = DesiredCapabilities.CHROME

driver = webdriver.Remote(command_executor='localhost:4444', desired_capabilities=cap)


更正:运行此 python 脚本可解决问题,已创建驱动程序并且可以在无头模式下浏览 Internet:


from selenium import webdriver

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

cap = DesiredCapabilities.CHROME 

driver = webdriver.Remote(command_executor='http://selenium-hub:4444/wd/hub',desired_capabilities=cap)

如何打开与在另一个 docker 容器中运行的 selenium chrome 的连接?SeleniumHQ/docker-selenium 中 的文档缺少这些细节。


docker network 上的文档说“一旦连接,容器只能使用另一个容器的 IP 地址或名称进行通信”,因此是否可以在 python 脚本中按名称调用另一个容器,例如:driver = webdriver.Remote(command_executor='chrome', desired_capabilities=cap). 我试过这个命令,但它给了我同样的错误:“连接被拒绝”。


陪伴而非守候
浏览 239回答 2
2回答

不负相思意

将您的selenium容器连接到同一网络backend并selenium-hub:4444用作主机名而不是localhost:4444.顺便问一下,你声明网络有什么用?它是docker-compose默认创建的。此外,无需显式声明container_name- 容器默认获取其服务的名称。我建议进行以下更改:docker-compose.ymlversion: '3'services:  selenium-hub:    image: selenium/hub:3.141.59-dubnium    ports:    - "4444:4444"  chrome:    image: selenium/node-chrome:3.141.59-dubnium    volumes:      - /dev/shm:/dev/shm    depends_on:      - selenium-hub    environment:      - HUB_HOST=selenium-hub      - HUB_PORT=4444  nbdatascience:     image: aabor/nbdatascience    build: nbdatascience/.    volumes:      - /home/$USER/py:/home/jovyan/work/py      - /home/$USER/.jupyter:/home/jovyan/.jupyter    ports:      - "10000:8888"    environment:      - TZ="Europe/Kiev"    restart: always    depends_on:      - chrome此外,如果您不从外部连接到容器,请删除暴露的端口。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python