外部訪問docker容器(docker run -p/-P 指令)
Mark_Zhang 關注 2017.06.07 18:17* 字數 570 閱讀 20839評論 0喜歡 1
容器中可以執行一些網路應用,要讓外部也可以訪問這些應用,可以通過 -P
(大寫) 或 -p
(小寫) 引數來指定埠對映。
(1)當使用 -P 標記時,Docker 會隨機對映一個 49000~49900
的埠到內部容器開放的網路埠。
使用 docker ps
可以看到,本地主機的 49155 被對映到了容器的 5000 埠。此時訪問本機的 49155 埠即可訪問容器內 web 應用提供的介面。
同樣的,可以通過 docker logs
命令來檢視應用的資訊。
(2)-p(小寫)則可以指定要對映的IP和埠,但是在一個指定埠上只可以繫結一個容器。支援的格式有 hostPort:containerPort
、ip:hostPort:containerPort
、 ip::containerPort
。
-
hostPort:containerPort
(對映所有介面地址)
將本地的 5000 埠對映到容器的 5000 埠,可以執行如下命令:$ sudo docker run -d -p 5000:5000 training/webapp python app.py
-
ip:hostPort:containerPort
(對映指定地址的指定埠)
指定對映使用一個特定地址,比如 localhost 地址 127.0.0.1$ sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
-
ip::containerPort
(對映指定地址的任意埠)
繫結 localhost 的任意埠到容器的 5000 埠,本地主機會自動分配一個埠。sudo docker run -d -p 127.0.0.1::5000 training/webapp python app.py
還可以使用 udp 標記來指定 udp 埠$ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
檢視對映埠配置
使用 docker port 來檢視當前對映的埠配置,也可以檢視到繫結的地址
注意:
- 容器有自己的內部網路和 ip 地址(使用 docker inspect 可以獲取所有的變數,Docker 還可以有一個可變的網路配置。)
- -p 標記可以多次使用來繫結多個埠
例如
$ sudo docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
原文連結:https://yeasy.gitbooks.io/docker_practice/content/network/port_mapping.html