docker允許通過外部訪問容器或者容器之間互聯的方式來提供網絡服務。
以下操作通過myfirstapp鏡像模擬
1、外部訪問容器
容器啟動之后,容器中可以運行一些網絡應用,通過-p或-p參數來指定端口映射。
a、用-p(大寫)標記時,docker會隨機選擇一個端口映射到容器內部開放的網絡端口上。
$ docker run -d -p myfirstapp python app.py
$ docker ps
container id image command created status ports names
dbcf5d3290ba myfirstapp python app.py 4 seconds ago up 4 seconds 0.0.0.0:32770->80/tcp quizzical_engelbart此時訪問本機的32770端口就可以訪問到容器內web應用提供的界面。
$ curl http://192.168.1.160:32770/
<h3>hello hello!</h3><b>hostname:</b> dbcf5d3290ba<br/><b>visits:</b> <i>cannot connect to redis, counter disabled</i>也可以使用docker logs來查看應用的信息
$ docker logs dbcf5d3290ba
* running on http://0.0.0.0:80/ (press ctrl+c to quit)
192.168.1.5 - - [29/mar/2018 06:17:34] get / http/1.1 200 -
192.168.1.5 - - [29/mar/2018 06:17:34] get /favicon.ico http/1.1 404 -
192.168.1.160 - - [29/mar/2018 06:17:43] get / http/1.1 200 -
192.168.1.5 - - [29/mar/2018 06:18:59] get / http/1.1 200 -b、使用-p(小寫)標記時則可以指定要映射的端口,并且在一個指定端口上只可以綁定一個容器,支持的格式有:
ip:hostport:containerport
ip::containerport
hostport:containerport
$ docker run -d -p 4000:80 myfirstapp python app.py
$ docker run -d -p 4001:80 myfirstapp python app.py
$ curl http://192.168.1.160:4000/
hello hello!hostname: f43ed2810353
visits:cannot connect to redis, counter disabled
$ curl http://192.168.1.160:4001/
hello hello! hostname:f43ed2810353
visits:cannot connect to redis, counter disabled可以看到本地4000端口已經被映射,換一個端口4001也被映射。
docker默認會映射本地所有的地址。現在我們來嘗試一下映射到指定地址的指定端口
$ docker run -d -p 127.0.0.1:4000:80 myfirstapp python app.py
$ curl http://127.0.0.1:4000/ ##訪問通過
$ curl http://localhost:4000/ ##訪問通過
$ curl http://192.168.1.160:4000/ ##訪問拒絕
curl: (7) failed connect to 192.168.1.160:4000; 拒絕連接然后要訪問容器中的應用只能通過127.0.0.1這個ip訪問。
接下來是綁定本機的任意端口到容器的80端口,隨機分配一個端口
$ docker run -d -p 127.0.0.1::80 myfirstapp python app.py
$ docker ps ##127.0.0.1:32770->80/tcp
$ curl http://127.0.0.1:32770/ ##訪問通過
$ curl http://localhost:32770/ ##訪問通過
$ curl http://192.168.1.160:32770/ ##訪問拒絕還可以指定通信協議
docker run -d -p 5003:80/udp myfirstapp python app.py2.查看容器綁定和映射的端口及ip地址
$ docker port 44de1b0b5312(容器id)
80/tcp -> 127.0.0.1:327703.注意事項
a.docker inspect查看容器自己的內部網絡和ip地址
$ docker inspect 44de1b0b5312(容器id)b.容器啟動綁定多ip
$ docker run -d -p 5005:5000 -p 5006:80 myfirstapp python app.py #容器id:44e703c1279a
$ docker port 44e703c1279a
5000/tcp -> 0.0.0.0:5005
80/tcp -> 0.0.0.0:5006
電腦通過360云盤檢測網絡上傳和下載速度的方法塔式服務器新創云硬盤轉速10000rpmKeep競品分析這個賬號不是我的但是被綁定了西部數碼賬號如何解綁手機網站的好處有哪些百度云服務器如何續費哪些豹子域名算是精品域名?虛擬機系統可移動設備中沒有USB網卡選項怎么解決