準備在阿里雲的ECS上裝的docker,我的主機是64位的Ubuntu14.04,內核版本是3.13,如下所示。
$uname -a
Linux iZ258qfn3t4Z 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
安裝過程基本是按照這個步驟來的。 它所述的安裝過程其實很簡單,依次這麼幾步驟:
-
下載docker安裝腳本並執行(假設你有curl或者wget)
$curl -sSL https://get.docker.com/ | sh
-
啓動docker
$sudo docker daemon
或者
$sudo service docker start
-
驗證安裝
$sudo docker run hello-world
但是安裝的過程中遇到這麼幾個問題,在這裏記錄一下。
-
找不到可用的內網IP
啓動docker daemon的過程中出現了這麼一個問題:
FATA[0000] Error starting daemon: Error initializing network controller: Error creating default "bridge" network: failed to parse pool request for address space "LocalDefault" pool "" subpool "": could not find an available predefined network
大致意思就是找不到一段可用的IP吧,後來查到的問題是因爲阿里雲上默認把幾個內網的網段都路由了。 在
/etc/network/interfaces
裏面是這麼寫的。auto lo iface lo inet loopback auto eth1 iface eth1 inet static address xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx up route add -net 0.0.0.0 netmask 0.0.0.0 gw xxx.xxx.xxx.xxx dev eth1 auto eth0 iface eth0 inet static address xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx up route add -net 192.168.0.0 netmask 255.255.0.0 gw xxx.xxx.xxx.xxx dev eth0 up route add -net 172.16.0.0 netmask 255.240.0.0 gw xxx.xxx.xxx.xxx dev eth0 up route add -net 100.64.0.0 netmask 255.192.0.0 gw xxx.xxx.xxx.xxx dev eth0 up route add -net 10.0.0.0 netmask 255.0.0.0 gw xxx.xxx.xxx.xxx eth0
裏面的xxx.xxx.xxx.xxx已打碼,並不影響你繼續看本頁面。最後幾行的
up route add
開頭的配置是說在接口啓用的時候添加一條路由規則, 比如up route add -net 172.16.0.0 netmask 255.240.0.0 gw xxx.xxx.xxx.xxx dev eth0
就是把172.16.0.0/20
這個網段都路由到網關xxx.xxx.xxx.xxx去。 所以我們要把它解放出來,讓docker用。編輯
/etc/network/interfaces
文件,用#註釋掉up route add -net 172.16.0.0 netmask 255.240.0.0 gw xxx.xxx.xxx.xxx dev eth0
, 然後執行route del -net 172.16.0.0 netmask 255.240.0.0
把現在啓用的路由也刪掉。可以用route -n
看一下現在的路由表。 -
內核不支持swap內存限制
解決了上一個問題繼續啓動docker daemon又會遇到這樣一個問題:
WARN[0000] Your kernel does not support swap memory limit.
這也寫了,是個warning,所以我估計不解決docker daemon也能跑起來,但是warning就是讓人不舒服。這日誌也說得很明白了,不支持swap內存限制。 改一下內核參數,Ubuntu默認使用grub,在文件
/etc/default/grub
裏面,把GRUB_CMDLINE_LINUX=""
改成GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
, 然後執行sudo update-grub
更新一下,然後重啓機器。重啓後可以用
cat /proc/cmdline
查看剛纔的選項是不是啓用了