共計 3850 個字符,預計需要花費 10 分鐘才能閱讀完成。
這篇文章給大家分享的是有關 Docker 中使用 0.9.1 版 Docker 會遇到什么問題的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
我測試時,使用 0.9.1 版 Docker 的問題:
1.Dockerfile 創建的 image 即使添加了 - t 也無法為新鏡像添加 tag 和名稱。
2. 使用 –link 參數但卻在子容器中的 /etc/hosts 找不到父容器的信息,導致無法直接 ping 主機名。
問題解決的關鍵:
安裝最新版 docker(看來前面的版本 bug 多多啊)
安裝步驟(ubuntu)(參考自官網手冊):
1. 安裝解析 https 的輔助工具:
apt-get install apt-transport-https
我強烈建議你安裝完后重啟機器,不然 apt 可能會無法解析 https 的網址!
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 了一個最小化的 ubuntu image:
docker pull dbehnke/ubuntu1404
在本地目錄創建了一個名為 Dockerfile 的文件,:
vi Dockerfile
#添加以下內容
#my test image
FROM dbehnke/ubuntu1404:latest # 從現有的 image 創建一個新的 image
MAINTAINER Hochikong # 維護者信息
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 # 從宿主機(172.16.77.157)的 apache2 服務器下載本地化的 sources.list 文件,因為國外源太慢
RUN apt-get update
執行 build:
docker build -t= hochikong/local:v1 .
#不要忘了后面的那一點,指代本地的 Dockerfile 文件;另外 hochikong 必須小寫,之前我輸入的是大寫提示 only [a-z0-9_] are allowed, size between 4 and 30
看看我的 image 有沒有被創建好:
之前這篇的問題終于被解決了
測試 –link 參數的使用:
先啟動一個名為 base 的容器 (父容器):
docker run -d -p 1000:5000 --name base training/webapp python app.py
查看狀態:
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
可以看到容器已經啟動,主機的 1000 端口被綁定到容器的 5000 端口,容器名為 base
再啟動一個名為 web 的子容器:
docker run -d -p 2000:5000 --name web --link base:base training/webapp python app.py
再次檢查狀態:
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 容器已經啟動。同時 base 容器的 NAMES 一欄多了 web/base 這個內容,實際上,web/base 中,web 指的是連接到 base 的子容器,但是 / 后面的是這個鏈接的別名(推薦和父容器的容器名相同,接下來你會知道為什么)
我再啟動一個名為 web2 的子容器,同樣連接到 base 上:
docker run -d -p 3000:5000 --name web2 --link base:connection2 training/webapp python app.py
看看 docker ps 的結果:
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 格式輸出指定容器的詳細信息,我直接用 grep 過濾出來
Pid : 21275,
連接 web2:
nsenter --target 21275 --mount --uts --net --ipc --pid # 使用那個 PID 值
查看該容器的 /etc/hosts 文件:
我再查看下 base 的 IP 地址:
root@docker:~# docker inspect base | grep IP
IPAddress : 172.17.0.11 ,
IPPrefixLen : 16,
你是不是覺得很殘念!實際上,172.17.0.11 正是 base 的 IP 地址,但是在 web2 中,顯示的卻是該鏈接的名稱,你 ping 主機 connection2 實際上是 ping 容器 base。但是我認為這很不合理!為什么 hosts 文件寫的不是父容器的容器名而是鏈接的名稱?
ping 下 base 容器:
ping 是 ping 得通。
正是因為不合理,我才強烈建議你這樣寫:
docker run -d -p 2000:5000 --name web --link base:base training/webapp python app.py
使鏈接的名(: 后的 base)和父容器名(: 前的 base)相同!
連接上 web 容器,可以看到 hosts 中的信息,這樣的話,ping 父容器名也更合理:
注意:
在 base 容器中不包含子容器的信息:
在設計應用的時候,尤其要注意這一點(不可能使 web 服務為父容器,數據庫為子容器吧?)
感謝各位的閱讀!關于“Docker 中使用 0.9.1 版 Docker 會遇到什么問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!