为了账号安全,请及时绑定邮箱和手机立即绑定

docker 容器中的 python jupyter notebook 连接到

docker 容器中的 python jupyter notebook 连接到

陪伴而非守候 2021-10-12 15:51:46
我使用以下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 webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiescap = DesiredCapabilities.CHROMEdriver = webdriver.Remote(command_executor='localhost:4444', desired_capabilities=cap)更正:运行此 python 脚本可解决问题,已创建驱动程序并且可以在无头模式下浏览 Internet:from selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiescap = 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). 我试过这个命令,但它给了我同样的错误:“连接被拒绝”。
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

将您的selenium容器连接到同一网络backend并selenium-hub:4444用作主机名而不是localhost:4444.


顺便问一下,你声明网络有什么用?它是docker-compose默认创建的。


此外,无需显式声明container_name- 容器默认获取其服务的名称。


我建议进行以下更改:


docker-compose.yml


version: '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

此外,如果您不从外部连接到容器,请删除暴露的端口。


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信