OSError:在Docker容器中运行python时的[Errno 8]
问题描述:
我最近学习了Docker的基础知识以及如何创建和运行图像。我正在尝试创建一个python脚本的图像,这个脚本会将一些数据网页抓取并上传到服务器。我使用Selenium,Chromium和Windows chromedriver。我试图在我的Windows机器上构建映像,并能够将它部署到一系列Linux/Windows服务器上。目前,我只是在同一台Windows机器上构建和运行,直到我运行它,但我仍然收到相同的错误,即使脚本直接在机器上直接运行。OSError:在Docker容器中运行python时的[Errno 8]
这是错误:
Traceback (most recent call last):
File "my-app.py", line 796, in <module>
startScraper();
File "my-app.py", line 92, in startScraper
browser = webdriver.Chrome(chrome_options = options, executable_path = path_to_chromedriver);
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 62, in __init__
self.service.start()
File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/common/service.py", line 74, in start
stdout=self.log_file, stderr=self.log_file)
File "/usr/local/lib/python3.6/subprocess.py", line 707, in __init__
restore_signals, start_new_session)
File "/usr/local/lib/python3.6/subprocess.py", line 1326, in _execute_child
raise child_exception_type(errno_num, err_msg)
OSError: [Errno 8] Exec format error
这似乎是有关铬的选择,但即使我删除所有的“附加参数”选项,错误仍然存在,但这里的选项:
options = webdriver.ChromeOptions();
options.binary_location = './chrome-win32/chrome.exe';
options.add_argument('headless')
options.add_argument('window-size=1400x1300')
options.add_argument('--mute-audio')
options.add_argument('--disable-web-security');
options.add_argument('--allow-running-insecure-content');
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
prefs = {"profile.managed_default_content_settings.images":2}
options.add_experimental_option("prefs", prefs);
path_to_chromedriver = './chromedriver.exe';
有什么,我失踪,能够在容器中运行此刮刀?谢谢!
编辑:我忘了加上Dockerfile我如何建立/运行映像:
Dockerfile:
FROM python:3.6.0
WORKDIR /my-app
ADD . /my-app
RUN pip install -r requirements.txt
ENV NAME Scraper
CMD ["python", "My_App.py"]
编译/运行图像: - 码头工人建立-t MYAPP - 泊坞窗运行myapp
也许有一些选择我不知道我错过了吗?
答
你正试图在linux容器内部运行一个exe文件,这是行不通的。您需要安装Chrome和chromedriver您Dockerfile内,更新代码以使用正确的路径
FROM python:3.6.0
RUN apt update && apt install -y chromedriver
WORKDIR /my-app
ADD . /my-app
RUN pip install -r requirements.txt
ENV NAME Scraper
CMD ["python", "My_App.py"]
更改您的代码
options = webdriver.ChromeOptions();
options.add_argument('headless')
options.add_argument('window-size=1400x1300')
options.add_argument('--mute-audio')
options.add_argument('--disable-web-security');
options.add_argument('--allow-running-insecure-content');
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
prefs = {"profile.managed_default_content_settings.images":2}
options.add_experimental_option("prefs", prefs);
path_to_chromedriver = '/usr/lib/chromium/chromedriver';