在使用docker启动superset,开启thumbnial后,控制台报错Failed at generating thumbnail Message: Unable to obtain driver for chrome; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location superset_worker | Traceback (most recent call last): superset_worker | File "/app/.venv/lib/python3.11/site-packages/selenium/webdriver/common/driver_finder.py", line 67, in _binary_paths superset_worker | output = SeleniumManager().binary_paths(self._to_args()) superset_worker | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ superset_worker | File "/app/.venv/lib/python3.11/site-packages/selenium/webdriver/common/selenium_manager.py", line 55, in binary_paths superset_worker | return self._run(args) superset_worker | ^^^^^^^^^^^^^^^ superset_worker | File "/app/.venv/lib/python3.11/site-packages/selenium/webdriver/common/selenium_manager.py", line 129, in _run superset_worker | raise WebDriverException( superset_worker | selenium.common.exceptions.WebDriverException: Message: Unsuccessful command executed: /app/.venv/lib/python3.11/site-packages/selenium/webdriver/common/linux/selenium-manager --browser chrome --language-binding python --output json; code: 65 superset_worker | {'code': 65, 'message': 'error sending request for url (https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json)', 'driver_path': '', 'browser_path': ''} superset_worker |
时间: 2025-04-12 19:33:18 浏览: 108
<think>嗯,用户在使用Docker启动Superset并开启缩略图功能时,遇到了控制台报错,提示无法获取Chrome的驱动,错误信息指向了Selenium Manager的问题。我需要先理解这个错误的原因。
首先,错误信息里提到`Unable to obtain driver for chrome`,这说明Superset在尝试使用Chrome浏览器生成缩略图时,无法找到对应的WebDriver。用户可能按照之前的指导修改了配置,启用了THUMBNAILS相关功能,并配置了WEBDRIVER_TYPE为Chrome,但在Docker环境中可能缺少必要的依赖。
接下来,用户使用的是Docker环境,所以需要检查Docker镜像中是否安装了Chrome浏览器和对应的ChromeDriver。常见的Docker镜像可能默认不包含这些组件,特别是如果用户是基于官方Superset镜像的话,可能需要自己安装。
另外,错误日志显示Selenium Manager尝试下载驱动但失败了,可能是因为网络问题,或者Selenium的版本与ChromeDriver不兼容。用户可能没有正确配置WebDriver的路径,或者Docker容器内无法访问外部网络来下载驱动。
然后,我需要考虑解决方案。首先,确保Dockerfile中安装了Chromium和ChromiumDriver,例如在基于Debian的镜像中使用apt-get安装。然后,确认环境变量WEBDRIVER_TYPE设置为chrome,并且正确指向浏览器和驱动的路径。此外,可能需要更新Selenium到兼容的版本,或者手动下载ChromeDriver并指定路径,避免依赖Selenium Manager自动下载,特别是在受限的网络环境中。
还需要检查Docker容器的权限问题,比如是否以root用户运行,或者是否有访问/dev/shm等目录的权限,这可能导致Chrome无法启动。此外,用户可能需要调整Selenium的配置,比如设置无头模式,禁用沙箱等参数,以适应容器环境。
最后,建议用户验证安装是否正确,通过在容器内执行命令检查Chrome和驱动的版本是否匹配,并运行测试脚本来确认WebDriver能否正常工作。如果问题依旧,可能需要查看日志中的详细错误,或者考虑使用其他浏览器驱动如Firefox作为替代方案。</think>以下是针对Docker环境下Superset缩略图生成失败的完整解决方案:
---
### 一、问题根源分析
错误`Unable to obtain driver for chrome`表明:
1. 容器内缺少Chrome浏览器本体
2. 未正确安装ChromeDriver驱动
3. Selenium无法自动下载所需组件(通常因容器网络限制)
---
### 二、完整修复步骤
#### 1. 修改Dockerfile
```dockerfile
# 基于官方镜像扩展
FROM apache/superset:latest
# 安装浏览器本体和驱动
USER root
RUN apt-get update && \
apt-get install -y \
chromium \
chromium-driver \
fonts-ipafont \
fonts-ipaexfont \
# 解决中文字体缺失问题
fonts-wqy-zenhei \
fonts-wqy-microhei
# 设置浏览器环境变量
ENV WEBDRIVER_TYPE=chrome
ENV CHROME_BIN=/usr/bin/chromium
ENV CHROME_DRIVER=/usr/bin/chromedriver
# 切换回原用户
USER superset
```
#### 2. 调整docker-compose.yml
```yaml
services:
superset:
environment:
- WEBDRIVER_BASEURL=http://superset:8088/ # 必须与内部访问地址一致
- WEBDRIVER_OPTION_ARGS=--headless,--no-sandbox,--disable-dev-shm-usage
- WEBDRIVER_TYPE=chrome
devices: # 解决/dev/shm权限问题
- "/dev/shm:/dev/shm"
```
#### 3. 安装Python依赖
```dockerfile
# 在Dockerfile中追加
RUN pip install --no-cache-dir \
selenium==4.15.2 \
webdriver-manager==4.0.1 \
Pillow==10.0.0
```
---
### 三、关键配置验证
进入容器执行:
```bash
# 检查浏览器是否可执行
chromium --version
# 应输出:Chromium 114.0.5735.133
# 验证驱动路径
ls -l /usr/bin/chromedriver
# 应显示有效驱动文件
# 测试Python环境
superset shell
>>> from selenium import webdriver
>>> options = webdriver.ChromeOptions()
>>> for arg in os.environ['WEBDRIVER_OPTION_ARGS'].split(','):
... options.add_argument(arg)
>>> driver = webdriver.Chrome(options=options)
>>> driver.get('https://www.baidu.com')
>>> driver.quit() # 无报错即成功
```
---
### 四、高级调试技巧
#### 1. 强制指定驱动版本
```python
# superset_config.py
WEBDRIVER_OPTION_ARGS = [
"--headless",
"--no-sandbox",
"--disable-dev-shm-usage",
"--remote-debugging-port=9222" # 启用调试端口
]
```
#### 2. 查看实时截图日志
```bash
docker exec -it superset-worker bash
superset celery worker --pool=prefork -l INFO
```
#### 3. 手动触发缩略图生成
```python
import requests
from requests.auth import HTTPBasicAuth
resp = requests.post(
"http://localhost:8088/api/v1/chart/1/thumbnail",
auth=HTTPBasicAuth('admin', 'admin')
)
print(resp.json())
```
---
### 五、常见问题补充
1. **字体显示异常**:
```dockerfile
# 在Dockerfile中追加中文字体
RUN apt-get install -y fonts-noto-cjk
```
2. **内存不足错误**:
```yaml
# docker-compose.yml
services:
superset-worker:
deploy:
resources:
limits:
memory: 2G
```
3. **驱动版本冲突**:
```bash
# 进入容器执行
chromedriver --version
chromium --version
# 需保证大版本号一致(例如都使用Chromium 114.x)
```
---
通过上述配置,可确保在Docker环境下稳定生成缩略图。建议优先使用`chromium`替代Google Chrome,因其更适合容器化部署。若仍需使用官方Chrome,需额外配置Google的APT源。
阅读全文