2017-09-11 86 views
0

我最近学习了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

也许有一些选择我不知道我错过了吗?

回答

0

你正试图在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';