Docker 入门系列(5)- Docker 端口映射(映射所有IP地址、映射到指定地址和指定端口、映射指定地址任意端口、查看映射端口配置)
端口映射
映射容器內應用的服務端口到本地宿主主機
1. 從外部訪問容器應用
在啟動容器的時候,如果不指定對應的參數,在容器外部是無法通過網絡來訪問容器內的網絡應用和服務的。當容器中運行一些網絡應用,要讓外部訪問這些應用時,可以通過 -P 或 -p 參數來指定端口映射。當使用 -P (大寫的)標記時,Docker 會隨機映射一個端口到內部容器開放的網絡端口:
wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker run -d -P training/webapp python app.py
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
4233fd67e97c62a073353315bf236ab081ae4ec501ae91ef1a62a4782004c5cb
wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4233fd67e97c training/webapp "python app.py" 12 seconds ago Up 11 seconds 0.0.0.0:32768->5000/tcp reverent_blackburn
wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$
- -d 啟動一個daemon并在后臺運行
- -P 映射一個網絡端口
- training/webapp docker 社區提供的,預先創建好的模板,里面包含一個簡單的 Python Flask web應用
可以使用 docker ps 看到,本地主機的 32768 被映射到了容器的 5000 端口。訪問宿主主機的 32768 端口即可訪問容器內Web應用提供的界面。同樣,可以通過docker logs命令來查看應用的信息:
wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker logs -f reverent_blackburn * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
-p (小寫的)可以指定要映射的端口,并且,在一個指定端口上只可以綁定一個容器。支持的格式有
- IP:HostPort: ContainerPort
- IP::ContainerPort
- HostPort:ContainerPort
2. 映射所有接口地址
使用 HostPort:ContainerPort 格式將本地的 5000 端口映射到容器的 5000 端口,可以執行:
docker run -d -p 5000:5000 training/webapp python app.py
此時默認會綁定本地所有接口上的所有地址。多次使用 -p 標記可以綁定多個端口。例如:
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
3. 映射到指定地址的指定端口
可以使用 IP:HostPort:ContainerPort 格式指定映射使用一個特定地址,比如 localhost 地址 127.0.0.1:
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
4. 映射到指定地址的任意端口
使用 IP::ContainerPort 綁定 localhost 的任意端口到容器的 5000 端口,本地主機會自動分配一個端口:
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
還可以使用 udp 標記來指定 udp 端口:
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
5. 查看映射端口配置
使用 docker port 命令來查看當前映射的端口配置,也可以查看到綁定的地址:
wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker port reverent_blackburn 5000
0.0.0.0:32768
wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$
注意:
容器有自己的內部網絡和 IP 地址,使用 docker inspect + 容器 ID 可以獲取容器的具體信息。
總結
以上是生活随笔為你收集整理的Docker 入门系列(5)- Docker 端口映射(映射所有IP地址、映射到指定地址和指定端口、映射指定地址任意端口、查看映射端口配置)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker 入门系列(4)- Dock
- 下一篇: Docker 入门系列(6)- Dock