我正在尝试将 Dockerfile 拆分为多阶段方法以减小大小。我正在使用 Selenium 和 Firefox,但从基本图像复制不起作用。
find / -name firefox
/usr/local/lib/python3.11/site-packages/selenium/webdriver/firefox
/usr/lib/firefox
/usr/lib/firefox/firefox
/usr/bin/firefox
which firefox
/usr/bin/firefox
Dockerfile:
FROM python:3.11.4-alpine
COPY --from=base_image /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY --from=base_image /usr/local/bin /usr/local/bin
COPY --from=base_image /usr/lib/firefox /usr/lib/firefox
COPY --from=base_image /usr/bin/firefox /usr/bin/firefox
COPY --from=base_image /project /project
硒.py:
from selenium import webdriver
options = webdriver.FirefoxOptions()
#options.binary_location = "/usr/lib/firefox/firefox"
#options.binary_location = "/usr/bin/firefox/firefox-bin"
#options.binary_location = "/usr/bin/firefox"
service = webdriver.FirefoxService(executable_path=driver_path)
driver = webdriver.Firefox(service=service, options=options)
三个 diff bin 路径都不起作用
如何将 Firefox 文件从基础复制到最终图像并使 Selenium 正常工作?
您可以使用它创建一个相当轻量级的 Docker 镜像。很难得到比这更简单的了。从一个阶段到另一个阶段挑选依赖项是不值得的。
Firefox 将安装到您的
PATH
上,因此无需显式指定此路径。
🗎
Dockerfile
FROM python:3.11.4-alpine
RUN apk add firefox && \
pip install selenium==4.18.1
COPY selenium-firefox.py .
ENV MOZ_HEADLESS=1
CMD python3 selenium-firefox.py
🗎
selenium-firefox.py
(一个简单的测试脚本。)
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)
driver.get("http://google.com/")
print(driver.title)
driver.quit()