溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker中使用0.9.1版Docker會(huì)遇到什么問題

發(fā)布時(shí)間:2021-11-19 11:20:14 來源:億速云 閱讀:148 作者:小新 欄目:云計(jì)算

這篇文章給大家分享的是有關(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)建好:

Docker中使用0.9.1版Docker會(huì)遇到什么問題

之前這篇的問題終于被解決了

測試--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文件:

Docker中使用0.9.1版Docker會(huì)遇到什么問題

我再查看下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容器:

Docker中使用0.9.1版Docker會(huì)遇到什么問題

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父容器名也更合理:

Docker中使用0.9.1版Docker會(huì)遇到什么問題

注意:

在base容器中不包含子容器的信息:

Docker中使用0.9.1版Docker會(huì)遇到什么問題

在設(shè)計(jì)應(yīng)用的時(shí)候,尤其要注意這一點(diǎn)(不可能使web服務(wù)為父容器,數(shù)據(jù)庫為子容器吧?)

感謝各位的閱讀!關(guān)于“Docker中使用0.9.1版Docker會(huì)遇到什么問題”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(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)容。

AI