久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Docker中使用0.9.1版Docker會遇到什么問題

143次閱讀
沒有評論

共計 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 有沒有被創建好:

Docker 中使用 0.9.1 版 Docker 會遇到什么問題

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

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

Docker 中使用 0.9.1 版 Docker 會遇到什么問題

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

Docker 中使用 0.9.1 版 Docker 會遇到什么問題

ping 是 ping 得通。

正是因為不合理,我才強烈建議你這樣寫:

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 會遇到什么問題

注意:

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

Docker 中使用 0.9.1 版 Docker 會遇到什么問題

在設計應用的時候,尤其要注意這一點(不可能使 web 服務為父容器,數據庫為子容器吧?)

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

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計3850字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 沙湾县| 临桂县| 珲春市| 唐山市| 嘉禾县| 文山县| 集贤县| 定兴县| 通化县| 淮滨县| 麻栗坡县| 钦州市| 望谟县| 南陵县| 云安县| 乌审旗| 右玉县| 建平县| 黔南| 宣化县| 扶绥县| 故城县| 山西省| 绥化市| 平山县| 二连浩特市| 夹江县| 铁力市| 兴城市| 金寨县| 乐平市| 中江县| 西和县| 白河县| 乌拉特前旗| 利津县| 岱山县| 济阳县| 尚义县| 谷城县| 监利县|