亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

詳解Docker 端口映射與容器互聯

2024-09-01 13:55:13
字體:
來源:轉載
供稿:網友

1、端口映射實現訪問容器

1.從外部訪問容器應用

在啟動容器的時候,如果不指定對應的參數,在容器外部是無法通過網絡來訪問容器內部的網絡應用和服務的。

當容器中運行一些網絡應用,要讓外部訪問這些應用時,可以通過-p或-P參數來指定端口映射。當使用-P(大寫P)標記時,Docker會隨機映射一個端口到內部容器開放的網絡端口(端口范圍在Linux系統使用的端口之外,一般都過萬):

[root@docker ~]# docker run -d --name nginx_1 -P nginx:latest f769af3e98478b27b87e008f3ad785e2055da4047442c4a8dcb8f621f810dbea[root@docker ~]# docker psCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS          NAMESf769af3e9847    nginx:latest    "nginx -g 'daemon ..."  3 seconds ago    Up 2 seconds    0.0.0.0:32768->80/tcp  nginx_1[root@docker ~]#

通過docker ps可以看到nginx_1容器的80端口被映射到本機的32768端口上。訪問宿主主機的32768端口就可以訪問容器內的應用程序提供的Web界面:

Docker,端口映射,容器互聯

同樣,可以通過docker logs命令查看應用信息:

[root@docker ~]# docker logs nginx_110.0.0.253 - - [29/Nov/2017:06:25:38 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"10.0.0.253 - - [29/Nov/2017:06:25:39 +0000] "GET /favicon.ico HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"2017/11/29 06:25:39 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.0.0.253, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "10.0.0.31:32768"10.0.0.253 - - [29/Nov/2017:06:25:39 +0000] "GET /favicon.ico HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"2017/11/29 06:25:39 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.0.0.253, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "10.0.0.31:32768"10.0.0.253 - - [29/Nov/2017:06:26:55 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "-"10.0.0.253 - - [29/Nov/2017:06:26:56 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://10.0.0.31:32768/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "-"2017/11/29 06:26:56 [error] 5#5: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.0.0.253, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "10.0.0.31:32768", referrer: "http://10.0.0.31:32768/"[root@docker ~]# 

-p(小寫p)可以指定要映射的端口,并且在一個指定的端口上只可以綁定一個容器。支持的格式有:IP:HostPort:ContainerPort | IP::ContainerPort | HostPort:ContainerPort 。

2.映射所有接口地址

使用HostPort:ContainerPort格式將本地的5000端口映射到容器的5000端口:

[root@docker ~]# docker run -itd -p 5000:5000 --name nginx_2 nginx:latest 5bdca2bde33d7db72861399ca49e82f0d209d13289d20b181843da5b10e6f2d3[root@docker ~]# docker psCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS              NAMES5bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  8 seconds ago    Up 7 seconds    80/tcp, 0.0.0.0:5000->5000/tcp  nginx_2f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  15 minutes ago   Up 15 minutes    0.0.0.0:32768->80/tcp      nginx_1[root@docker ~]# 

此時默認會綁定本地所有接口上的所有地址。多次使用-p參數可以綁定多個端口:

[root@docker ~]# docker run -itd -p 3000:2700 -p 2389:8863 --name nginx_3 nginx:latest 65fbfbe9761eb5146501311016d681f210b1891ca5f5af62dc978ad6f2a22750[root@docker ~]# docker psCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                          NAMES65fbfbe9761e    nginx:latest    "nginx -g 'daemon ..."  3 seconds ago    Up 2 seconds    80/tcp, 0.0.0.0:3000->2700/tcp, 0.0.0.0:2389->8863/tcp  nginx_35bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  2 minutes ago    Up 2 minutes    80/tcp, 0.0.0.0:5000->5000/tcp              nginx_2f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  18 minutes ago   Up 18 minutes    0.0.0.0:32768->80/tcp                  nginx_1[root@docker ~]# 

3.映射到指定地址的指定端口

可以使用IP:HostPort:ContainerPort格式指定映射使用一個特定地址:

[root@docker ~]# docker run -itd -p 10.0.0.31:89:8081 --name nginx_4 nginx:latest 16a476837222d413926053e1c8175c993b0495732073fbc6251dfd4696db8242[root@docker ~]# docker psCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                          NAMES16a476837222    nginx:latest    "nginx -g 'daemon ..."  4 seconds ago    Up 3 seconds    80/tcp, 10.0.0.31:89->8081/tcp              nginx_465fbfbe9761e    nginx:latest    "nginx -g 'daemon ..."  2 minutes ago    Up 2 minutes    80/tcp, 0.0.0.0:3000->2700/tcp, 0.0.0.0:2389->8863/tcp  nginx_35bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  5 minutes ago    Up 5 minutes    80/tcp, 0.0.0.0:5000->5000/tcp              nginx_2f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  20 minutes ago   Up 20 minutes    0.0.0.0:32768->80/tcp                  nginx_1[root@docker ~]# 

4.映射到指定地址的任意端口

使用IP::ContainerPort格式綁定本機的任意端口到容器的指定端口:

[root@docker ~]# docker run -itd -p 10.0.0.31::8082 --name nginx_5 nginx:latest 3436fd5fbdca6529c70c664f42edfd10d51edb0fb541b096b47c9b168887b2ca[root@docker ~]# docker psCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                          NAMES3436fd5fbdca    nginx:latest    "nginx -g 'daemon ..."  2 seconds ago    Up 2 seconds    80/tcp, 10.0.0.31:32769->8082/tcp            nginx_516a476837222    nginx:latest    "nginx -g 'daemon ..."  2 minutes ago    Up 2 minutes    80/tcp, 10.0.0.31:89->8081/tcp              nginx_465fbfbe9761e    nginx:latest    "nginx -g 'daemon ..."  4 minutes ago    Up 4 minutes    80/tcp, 0.0.0.0:3000->2700/tcp, 0.0.0.0:2389->8863/tcp  nginx_35bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  7 minutes ago    Up 7 minutes    80/tcp, 0.0.0.0:5000->5000/tcp              nginx_2f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  22 minutes ago   Up 22 minutes    0.0.0.0:32768->80/tcp                  nginx_1[root@docker ~]# 

容器啟動后,本機會隨機自動分配一個未被占用的端口。

 5.查看映射端口配置

使用docker port命令來查看當前映射的端口配置,也可以查看綁定的地址

[root@docker ~]# docker port nginx_180/tcp -> 0.0.0.0:32768[root@docker ~]# docker port nginx_25000/tcp -> 0.0.0.0:5000[root@docker ~]# docker port nginx_32700/tcp -> 0.0.0.0:30008863/tcp -> 0.0.0.0:2389[root@docker ~]# docker port nginx_48081/tcp -> 10.0.0.31:89[root@docker ~]# docker port nginx_58082/tcp -> 10.0.0.31:32769[root@docker ~]#

注意:

容器有自己的內部網絡和IP地址,使用docker inspect +容器ID可以獲取容器的具體信息。

2、互聯機制實現便捷訪問

容器的互聯是一種讓多個容器中應用進行快速交互的方式,它會在源和接收容器之間建立連接關系,接收容器可以通過容器名快速訪問到源容器,而不用指定具體的IP地址。

1.自定義容器命名

連接系統依據容器的名稱來執行。因此,首先要給容器定義一個簡單好記的名字。在容器創建的時候,系統會隨機創建一個容器名,但是并沒有特殊的意義也不便于記憶,所有自定義容器名有一下亮點好處:

1.自定義的命名比較好記,比如一個Web應用容器,就可以起名web,既方便記憶也方便理解容器的作用;
2.當要連接其他容器時,即使重啟,也可以使用自定義的容器名,,比如web容器連接到db容器。

使用--name參數可以為容器自定義命名:

[root@docker ~]# docker run -itd --name centos_1 centos:latest 4d58a9f6f324185caf53dbe5eaee85f35e853842ffb037cf272c2a92cee89716[root@docker ~]# docker psCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                          NAMES4d58a9f6f324    centos:latest    "/bin/bash"       6 seconds ago    Up 5 seconds                                 centos_13436fd5fbdca    nginx:latest    "nginx -g 'daemon ..."  11 minutes ago   Up 11 minutes    80/tcp, 10.0.0.31:32769->8082/tcp            nginx_516a476837222    nginx:latest    "nginx -g 'daemon ..."  13 minutes ago   Up 13 minutes    80/tcp, 10.0.0.31:89->8081/tcp              nginx_465fbfbe9761e    nginx:latest    "nginx -g 'daemon ..."  15 minutes ago   Up 15 minutes    80/tcp, 0.0.0.0:3000->2700/tcp, 0.0.0.0:2389->8863/tcp  nginx_35bdca2bde33d    nginx:latest    "nginx -g 'daemon ..."  18 minutes ago   Up 18 minutes    80/tcp, 0.0.0.0:5000->5000/tcp              nginx_2f769af3e9847    nginx:latest    "nginx -g 'daemon ..."  34 minutes ago   Up 34 minutes    0.0.0.0:32768->80/tcp                  nginx_1[root@docker ~]# 

通過docker ps或者docker ps -a可以查看到容器的自定義名字,利用docker inspect也可以獲取到容器自定義名字:

[root@docker ~]# docker inspect -f "{{.Name}}" 4d58a9f6f324/centos_1[root@docker ~]#

注意:

容器的名稱是唯一的。如果已經命名了一個web的容器,當再次使用web這個命名的時候會報錯,如果一定要使用,需要先用docker rm刪除之前創建的web容器。

在執行docker run的時候如果添加--rm參數,則容器終止后會立刻刪除。--rm參數和-d參數不能同時使用。

2、容器互聯

使用--link參數可以讓容器之間安全地進行交互。

創建一個數據庫容器:

[root@docker ~]# docker run -itd --name db --env MYSQL_ROOT_PASSWORD=example mariadbb239b124946c99b7da63e00c22df802e9612fbe8bc636389205baf6c2f6963bd[root@docker ~]# docker psCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS        NAMESb239b124946c    mariadb       "docker-entrypoint..."  3 seconds ago    Up 2 seconds    3306/tcp      db[root@docker ~]#

創建一個web容器并將它連接到db容器:

[root@docker ~]# docker run -itd -P --name web --link db:db nginx:latest 42fa6662784010368b5e615d495e71920d85cc1bc089a5d181657514973ee90a[root@docker ~]# docker psCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS        NAMES86ef0f632ffe    nginx:latest    "nginx -g 'daemon ..."  44 seconds ago    Up 43 seconds    80/tcp       webb239b124946c    mariadb       "docker-entrypoint..."  About a minute ago  Up 59 seconds    3306/tcp      db[root@docker ~]# 

此時web容器已經和db容器建立互聯關系:--link參數的格式為:--link name:alias,其中name是要連接的容器名稱,alias是這個連接的別名。

Docker相當于在兩個互聯的容器之間創建了一個虛擬通道,而不用映射它們的端口到宿主機上。在啟動db容器的時候并沒有使用-p或者-P參數,從而避免了暴露數據庫服務端口到外部網絡上。

Docker通過兩種方式為容器公開連接信息:

1.更新環境變量;
2.更新/etc/hosts文件。

使用env命令來查看web容器的環境變量:

[root@docker ~]# docker run --rm --name web3 --link db:db nginx:latest envPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=7258de738125DB_PORT=tcp://172.17.0.2:3306DB_PORT_3306_TCP=tcp://172.17.0.2:3306DB_PORT_3306_TCP_ADDR=172.17.0.2DB_PORT_3306_TCP_PORT=3306DB_PORT_3306_TCP_PROTO=tcpDB_NAME=/web3/dbDB_ENV_MYSQL_ROOT_PASSWORD=exampleDB_ENV_GOSU_VERSION=1.10DB_ENV_GPG_KEYS=199369E5404BD5FC7D2FE43BCBCB082A1BB943DB   430BDF5C56E7C94E848EE60C1C4CBDCDCD2EFD2A   4D1BB29D63D98E422B2113B19334A25F8507EFA5DB_ENV_MARIADB_MAJOR=10.2DB_ENV_MARIADB_VERSION=10.2.11+maria~jessieNGINX_VERSION=1.13.7-1~stretchNJS_VERSION=1.13.7.0.1.15-1~stretchHOME=/root[root@docker ~]# 

其中DB_開頭的環境變量是提供web容器連接db容器使用的,前綴采用大寫的連接別名。

除了環境變量之外,Docker還添加host信息到父容器的/etc/hosts文件。

[root@docker ~]# docker run -it --rm --link db:db nginx:latest /bin/bashroot@16b8e6fde27f:/# cat /etc/hosts 172.17.0.2  db b239b124946c172.17.0.5  16b8e6fde27froot@16b8e6fde27f:/#

這里有兩個hosts信息,第一個是db容器的IP和容器名+容器ID,第二個是web自己的IP和容器ID,web容器中hosts文件采用容器的ID作為主機名。

互聯的容器之間是可以ping通的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
57pao成人永久免费视频| 久久av在线播放| 日日骚av一区| 国产精品中文久久久久久久| 国产精品入口夜色视频大尺度| 一区二区三区四区在线观看视频| 国产成人一区二区三区| 91在线中文字幕| 久久综合久久美利坚合众国| 91免费在线视频网站| 日韩精品在线观看一区二区| 久久视频在线播放| 成人性生交大片免费看小说| 亚洲人成网站在线播| 久久影院中文字幕| 欧美成人高清视频| 色婷婷av一区二区三区久久| 亚洲美女av在线播放| 性欧美视频videos6一9| 一区二区在线视频播放| 国产精品一二区| 国产精品一香蕉国产线看观看| 成人免费看吃奶视频网站| 精品国产乱码久久久久酒店| 国产精品久久久久久久久久久久久| 久久偷看各类女兵18女厕嘘嘘| 亚洲在线观看视频| 日韩免费观看网站| 中文字幕一精品亚洲无线一区| 久久天天躁狠狠躁夜夜爽蜜月| 96精品久久久久中文字幕| www.久久色.com| 亚洲精品一二区| 久久免费精品视频| 97在线视频观看| 日韩免费不卡av| 欧美国产日韩在线| 日韩电影中文 亚洲精品乱码| 欧美精品videos| 欧美亚洲成人免费| 国产精品7m视频| 国产va免费精品高清在线观看| 亚洲精品v欧美精品v日韩精品| 国产视频亚洲视频| 欧美国产日韩一区二区在线观看| 国产丝袜精品视频| 在线中文字幕日韩| 色偷偷亚洲男人天堂| 亚洲精品国产免费| 欧美另类第一页| 欧美日韩国产一区中文午夜| 国产精品入口福利| 亚洲成人久久一区| 97精品在线视频| 亚洲最大福利网站| 日本高清不卡在线| 国产精品免费福利| 国产精品久久久久免费a∨| 亚洲欧美中文字幕在线一区| 久久青草福利网站| 日韩中文字幕网站| 高清视频欧美一级| 成人黄色激情网| 久久综合电影一区| 国产精品久久久久久久久久ktv| 久久九九精品99国产精品| 亚洲天堂网在线观看| 最近日韩中文字幕中文| 美女国内精品自产拍在线播放| 精品亚洲夜色av98在线观看| 久久九九国产精品怡红院| 欧美成aaa人片在线观看蜜臀| 九九热最新视频//这里只有精品| 午夜精品蜜臀一区二区三区免费| 国产精品黄色影片导航在线观看| 一道本无吗dⅴd在线播放一区| 欧美日韩福利电影| 国产美女搞久久| 国产精品精品久久久久久| 菠萝蜜影院一区二区免费| 亚洲第一视频网站| 日韩欧美一区视频| 欧美在线日韩在线| 亚洲一级黄色片| 欧美激情精品久久久| 欧美日韩在线视频一区二区| 国产在线观看91精品一区| 久久九九亚洲综合| 欧美黑人巨大xxx极品| 超薄丝袜一区二区| 日本在线观看天堂男亚洲| 国产精品无码专区在线观看| 国产综合视频在线观看| 日韩专区在线观看| 日本aⅴ大伊香蕉精品视频| 美女国内精品自产拍在线播放| 国产v综合ⅴ日韩v欧美大片| 国产在线拍偷自揄拍精品| 欧美日韩中文在线观看| 日本久久精品视频| 欧美性猛交视频| 国产欧美婷婷中文| 国产精品一区=区| 日韩第一页在线| 欧美在线免费视频| 久久精品色欧美aⅴ一区二区| 欧美午夜电影在线| 久久亚洲国产成人| 中文字幕在线看视频国产欧美| 日韩欧美亚洲国产一区| 8090成年在线看片午夜| 在线视频国产日韩| 国产精品白嫩美女在线观看| 国产精品女视频| 国产不卡精品视男人的天堂| 91在线观看免费高清完整版在线观看| 日韩成人免费视频| 51久久精品夜色国产麻豆| 日韩三级成人av网| 成人中文字幕+乱码+中文字幕| 26uuu另类亚洲欧美日本老年| 久久青草福利网站| 国产精品久久久久久久久久久久久久| 98精品国产自产在线观看| 91香蕉国产在线观看| 亚洲欧美另类中文字幕| 欧美有码在线观看视频| 午夜欧美大片免费观看| 国产精品99一区| 国产精品一区二区3区| 韩国国内大量揄拍精品视频| 久久久成人的性感天堂| 大桥未久av一区二区三区| 亚洲女人被黑人巨大进入| 欧美大尺度激情区在线播放| 欧美精品videosex牲欧美| 中文字幕精品久久| 九九热精品视频| 成人h视频在线观看播放| 91九色国产视频| 亚洲欧洲在线视频| 国产精品亚洲美女av网站| 尤物yw午夜国产精品视频| 性欧美办公室18xxxxhd| 青青久久av北条麻妃黑人| 成人免费网站在线| 国产精品网址在线| 国内精久久久久久久久久人| 亚洲欧美国产高清va在线播| 亚洲国产成人久久综合| 日韩激情在线视频| 国产精品精品久久久久久| 午夜欧美不卡精品aaaaa| 亚洲国产精品人人爽夜夜爽| 啪一啪鲁一鲁2019在线视频| 91视频免费网站| 亚洲国产精品一区二区三区| 亚洲图片欧美日产| 日韩av不卡在线| 在线看欧美日韩| 91精品国产高清久久久久久91| 欧美国产日韩一区| 91精品久久久久久久| 国产成人久久久精品一区|