釋出和暴露埠
解釋
如果您一直關注指南,您就會明白容器為應用程式的每個元件提供隔離的程序。每個元件 - React 前端、Python API 和 Postgres 資料庫 - 都在自己的沙箱環境中執行,與主機上的其他所有內容完全隔離。這種隔離對於安全性管理依賴關係非常棒,但也意味著您無法直接訪問它們。例如,您無法在瀏覽器中訪問 Web 應用程式。
這就是埠釋出的作用。
釋出埠
釋出埠透過設定轉發規則,提供突破網路隔離的能力。例如,您可以指示主機埠 8080
上的請求應轉發到容器埠 80
。埠釋出在使用 docker run
命令建立容器時發生,使用 -p
(或 --publish
)標誌和語法如下:
$ docker run -d -p HOST_PORT:CONTAINER_PORT nginx
HOST_PORT
:您希望接收流量的主機上的埠號CONTAINER_PORT
:容器內偵聽連線的埠號
例如,要將容器埠 80
釋出到主機埠 8080
$ docker run -d -p 8080:80 nginx
現在,傳送到主機埠 8080
的任何流量都將轉發到容器內的埠 80
。
重要
預設情況下,釋出埠時,它會發布到所有網路介面。這意味著到達您機器的任何流量都可以訪問已釋出的應用程式。請注意釋出資料庫或任何敏感資訊。 在此處瞭解有關已釋出埠的更多資訊.
釋出到臨時埠
有時,您可能只想釋出埠,而不關心使用哪個主機埠。在這種情況下,您可以讓 Docker 為您選擇埠。為此,只需省略 HOST_PORT
配置即可。
例如,以下命令會將容器埠 80
釋出到主機上的臨時埠
$ docker run -p 80 nginx
容器執行後,使用 docker ps
將顯示選擇的埠
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a527355c9c53 nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:54772->80/tcp romantic_williamson
在此示例中,應用程式在主機埠 54772
上公開。
釋出所有埠
建立容器映象時,EXPOSE
指令用於指示打包的應用程式將使用指定的埠。這些埠預設情況下不會發布。
使用 -P
或 --publish-all
標誌,您可以自動將所有公開埠釋出到臨時埠。當您試圖在開發或測試環境中避免埠衝突時,這非常有用。
例如,以下命令將釋出映象配置的所有公開埠
$ docker run -P nginx
試試看
在本動手指南中,您將學習如何使用 CLI 和 Docker Compose 釋出容器埠,以部署 Web 應用程式。
使用 Docker CLI
在此步驟中,您將執行一個容器並使用 Docker CLI 釋出其埠。
下載並安裝 Docker Desktop。
在終端中,執行以下命令啟動一個新容器
$ docker run -d -p 8080:80 docker/welcome-to-docker
第一個
8080
指的是主機埠。這是您本地機器上用於訪問容器內執行的應用程式的埠。第二個80
指的是容器埠。這是容器內的應用程式偵聽傳入連線的埠。因此,該命令將主機上的埠8080
繫結到容器系統上的埠80
。透過轉到 Docker 儀表板的**容器**檢視來驗證已釋出的埠。
透過選擇容器的**埠(s)** 列中的連結或訪問 https://:8080 在您的瀏覽器中開啟網站。
使用 Docker Compose
此示例將使用 Docker Compose 啟動相同的應用程式
建立一個新目錄,並在該目錄中建立一個包含以下內容的
compose.yaml
檔案services: app: image: docker/welcome-to-docker ports: - 8080:80
ports
配置接受埠定義的幾種不同的語法形式。在本例中,您使用的是與docker run
命令中相同的HOST_PORT:CONTAINER_PORT
。開啟一個終端並導航到您在上一步中建立的目錄。
使用
docker compose up
命令啟動應用程式。在您的瀏覽器中開啟 https://:8080。
其他資源
如果您想更深入地瞭解這個主題,請務必檢視以下資源
下一步
現在您已經瞭解瞭如何釋出和暴露埠,您就可以學習如何使用 docker run
命令覆蓋容器預設值。