您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Docker中使用0.9.1版Docker會(huì)遇到什么問題的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
我測試時(shí),使用0.9.1版Docker的問題:
1.Dockerfile創(chuàng)建的image即使添加了-t也無法為新鏡像添加tag和名稱。
2.使用--link參數(shù)但卻在子容器中的/etc/hosts找不到父容器的信息,導(dǎo)致無法直接ping主機(jī)名。
問題解決的關(guān)鍵:
安裝最新版docker(看來前面的版本bug多多啊)
安裝步驟(ubuntu)(參考自官網(wǎng)手冊):
1.安裝解析https的輔助工具:
apt-get install apt-transport-https
我強(qiáng)烈建議你安裝完后重啟機(jī)器,不然apt可能會(huì)無法解析https的網(wǎng)址!
2.添加key和源:
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 sh -c "echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list" sudo apt-get update
3.安裝lxc-docker:
apt-get install lxc-docker
4.檢查docker版本:
docker version
顯示版本號如下(1.2.0):
root@docker:~# docker version Client version: 1.2.0 Client API version: 1.14 Go version (client): go1.3.1 Git commit (client): fa7b24f OS/Arch (client): linux/amd64 Server version: 1.2.0 Server API version: 1.14 Go version (server): go1.3.1 Git commit (server): fa7b24f
測試Dockerfile:
我pull了一個(gè)最小化的ubuntu image:
docker pull dbehnke/ubuntu1404
在本地目錄創(chuàng)建了一個(gè)名為Dockerfile的文件,:
vi Dockerfile #添加以下內(nèi)容 #my test image FROM dbehnke/ubuntu1404:latest #從現(xiàn)有的image創(chuàng)建一個(gè)新的image MAINTAINER Hochikong #維護(hù)者信息 RUN mkdir -p /home/backup RUN mv /etc/apt/sources.list /home/backup RUN wget http://172.16.77.157/sources.list -P /etc/apt #從宿主機(jī)(172.16.77.157)的apache2服務(wù)器下載本地化的sources.list文件,因?yàn)閲庠刺? RUN apt-get update
執(zhí)行build:
docker build -t="hochikong/local:v1" . #不要忘了后面的那一點(diǎn),指代本地的Dockerfile文件;另外hochikong必須小寫,之前我輸入的是大寫提示"only [a-z0-9_] are allowed, size between 4 and 30"
看看我的image有沒有被創(chuàng)建好:
之前這篇的問題終于被解決了
測試--link參數(shù)的使用:
先啟動(dòng)一個(gè)名為base的容器(父容器):
docker run -d -p 1000:5000 --name base training/webapp python app.py
查看狀態(tài):
root@docker:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 928ebabc26eb training/webapp:latest "python app.py" 32 seconds ago Up 31 seconds 0.0.0.0:1000->5000/tcp base
可以看到容器已經(jīng)啟動(dòng),主機(jī)的1000端口被綁定到容器的5000端口,容器名為base
再啟動(dòng)一個(gè)名為web的子容器:
docker run -d -p 2000:5000 --name web --link base:base training/webapp python app.py
再次檢查狀態(tài):
root@docker:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 21f82b33c27a training/webapp:latest "python app.py" 30 seconds ago Up 29 seconds 0.0.0.0:2000->5000/tcp web 928ebabc26eb training/webapp:latest "python app.py" 2 minutes ago Up 2 minutes 0.0.0.0:1000->5000/tcp base,web/base
可以看到,web容器已經(jīng)啟動(dòng)。同時(shí)base容器的NAMES一欄多了web/base這個(gè)內(nèi)容,實(shí)際上,"web/base"中,web指的是連接到base的子容器,但是"/"后面的是這個(gè)鏈接的別名(推薦和父容器的容器名相同,接下來你會(huì)知道為什么)
我再啟動(dòng)一個(gè)名為web2的子容器,同樣連接到base上:
docker run -d -p 3000:5000 --name web2 --link base:connection2 training/webapp python app.py
看看docker ps的結(jié)果:
root@docker:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d180046639f4 training/webapp:latest "python app.py" 57 seconds ago Up 56 seconds 0.0.0.0:3000->5000/tcp web2 21f82b33c27a training/webapp:latest "python app.py" 5 minutes ago Up 5 minutes 0.0.0.0:2000->5000/tcp web 928ebabc26eb training/webapp:latest "python app.py" 8 minutes ago Up 8 minutes 0.0.0.0:1000->5000/tcp base,web/base,web2/connection2
在base的NAMES欄多了"web2/connection2"(對此你可以參考https://docs.docker.com/userguide/dockerlinks/,看看"--link name:alias"的含義)
我們通過nsenter連接一下web2,先獲取PID號:
root@docker:~# docker inspect web2 | grep Pid #docker inspect CONTAINERNAME能以JSON格式輸出指定容器的詳細(xì)信息,我直接用grep過濾出來 "Pid": 21275,
連接web2:
nsenter --target 21275 --mount --uts --net --ipc --pid #使用那個(gè)PID值
查看該容器的/etc/hosts文件:
我再查看下base的IP地址:
root@docker:~# docker inspect base | grep IP "IPAddress": "172.17.0.11", "IPPrefixLen": 16,
你是不是覺得很殘念!實(shí)際上,172.17.0.11正是base的IP地址,但是在web2中,顯示的卻是該鏈接的名稱,你ping主機(jī)connection2實(shí)際上是ping容器base。但是我認(rèn)為這很不合理!為什么hosts文件寫的不是父容器的容器名而是鏈接的名稱?
ping下base容器:
ping是ping得通。
正是因?yàn)椴缓侠?,我才?qiáng)烈建議你這樣寫:
docker run -d -p 2000:5000 --name web --link base:base training/webapp python app.py
使鏈接的名(":"后的base)和父容器名(":"前的base)相同!
連接上web容器,可以看到hosts中的信息,這樣的話,ping父容器名也更合理:
注意:
在base容器中不包含子容器的信息:
在設(shè)計(jì)應(yīng)用的時(shí)候,尤其要注意這一點(diǎn)(不可能使web服務(wù)為父容器,數(shù)據(jù)庫為子容器吧?)
感謝各位的閱讀!關(guān)于“Docker中使用0.9.1版Docker會(huì)遇到什么問題”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。