Pages - Menu

2020年6月5日 星期五

[Docker]Scrapyd容器搶救大作戰

前言

時間回到早上九點四十五分,此時的我突然想到,

怪了我的爬蟲怎麼沒跑,難道是網站的網址改掉了嗎?

經過一連串的查證,發現,我的爬蟲又掛拉阿阿阿阿阿

 

正文

1.重開後發現docker服務沒啟動,連線不到docker

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

還好還能強制執行服務

sudo service docker start

看樣子 scrapy的容器還是掛了,啟動不了。

查一下目前的container狀態,顯示Exited (255)    (Fig.1)

 


(Fig.1)

2.先看看log寫啥吧

取最後100筆資料

docker logs scrapydII --tail 100

看了看錯誤,還是跟上次 這篇([DOCKER]SCRAPYD CONTAINER無法啟動,搶救筆記) 一樣

builtins.AttributeError: 'int' object has no attribute 'splitlines'

又是Twisted 惹的禍,但我記得有把ubuntu關掉。

先看資料夾掛載在哪了。


docker inspect old-scrapyd


查看mount的位置(Fig.2)

 

(Fig.2)

該說好運還是壞運,看了一下先前的文章,連環境對應的指令都寫在上面了XDDDD

3.掛載Container

sudo docker run -d --name=scrapydIII -p 6800:6800 -v ~/scrapyd:/var/lib/scrapyd rockyuan/scrapyd

但我記得裝完後還要裝一些其他的套件,這次記得把套件轉成一個docker image,避免未來還要重新裝一次。

其實應該是要把twisted的自動更新關掉才對,上次關了ubuntu的自動更新。看來是沒用。

 

4.進入docker容器 ([DOCKER]常用指令大集合)

docker exec -it scrapydIII bash

 

5.升級軟體列表 ([DOCKER]容器內軟體安裝方式)

apk upgrade

apk update

apk search

 

6.安裝mongoDB,PostgresSQL([SCRAPYD]在SCRPAYD CONTAINER內安裝POSTGRESQL)

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py

apk add postgresql-dev gcc python3-dev musl-dev

pip3 install psycopg2

pip3 install pymongo

 

7.安裝完成後重開機

然後……又掛了。問題依舊。卡在Twisted  的版本。

 

8.結論

再來不斷的Google終於發現問題所在…

Twisted跟ubuntu沒關係,可以看一下 Scrapy的架構一、Scrapy的Twisted引擎模型二、Scrapy的性能模型三、Scrapy架構組件數據流(Data flow)四、Scrapy架構

所以!!!只要我照著第六步驟,更新了pip3,就會導致scrapy的Twisted更新,只要一更新再重開Docker就開不起來了。

所以,應該怎麼做?先來看到 Twisted 19.2.0 assumes http headers are of string type ,下面的回覆有人寫說已經修復好這個錯誤了。

我們要做的就是更新Scrapy,pip的指令可參考 [PYTHON]PIP3常用指令列表

 

pip3 install -U scrapy

 

重開機試試看,收工~~!!!

 

 

 

ref .

docker容器退出狀態怎麼看

What does docker container exit status 255 mean?

沒有留言:

張貼留言