簡體   English   中英

Docker 運行 -p?/? (這兩個端口號是什么,它們代表什么)

[英]Docker run -p ?/? (what are this two port numbers and what they represents )

我使用了命令“docker run -p 8080/8080 --name my_local_image....”,但無法在本地找到圖像“8080/8080:latest”

8080/8080 = 這兩個端口究竟代表什么?

用這個“ -p 8080:8080 ”替換這個“ -p 8080/8080

  • 第一個端口:Docker 主機(您可以使用此端口訪問您的容器)從外部訪問容器。
  • 第二個:是您的應用程序使用的端口。

Example: I want to run tomcat server in a docker container, the default port of tomcat is 8080 and I want to expose my docker on port 9000 so i have to write:

docker run -p 9000:8080 --name myTomcatContainer tomcat 

因此,通過此配置,我可以使用以下命令從外部訪問 Tomcat:http://host-ip:9000

-p選項用於公開用於映像實例的端口。 第一個是主機端口,“:”后的第二個fullcolon是它應該映射到的容器端口。 有關更多詳細信息,請閱讀doc

您在使用 docker run 啟動實例時收到的錯誤告訴我們,您隨命令提供的映像名稱在您使用的機器上本地不可用,這也可能是您提供端口的方式的問題使用 '/' 而不是 ":"。所以,為了安全起見,首先使用docker pull從 repo 中提取最新圖像,然后使用正確的語法運行它。

--expose=[]:暴露容器內的一個端口或一系列端口。 這些是EXPOSE指令公開的附加內容

-P:將所有暴露的端口發布到主機接口

-p=[]:發布一個容器的端口或一系列端口到主機格式:ip:hostPort:containerPort | ip::containerPort | 主機端口:容器端口 | containerPort hostPort 和 containerPort 都可以指定為一系列端口。 為兩者指定范圍時,范圍內的容器端口數必須與范圍內的主機端口數匹配,例如:-p 1234-1236:1234-1236/tcp 僅為 hostPort 指定范圍時,containerPort 必須不是一個范圍。 在這種情況下,容器端口在指定的 hostPort 范圍內發布。 (例如, -p 1234-1236:1234/tcp )(使用 'docker port' 查看實際映射)

--link="": 添加到另一個容器的鏈接 (:alias or )

只是為了在這里已經很好的答案中添加一點,我喜歡使用在城市中尋找朋友公寓的類比來解釋端口號。

在這個類比中,

  • 主機操作系統 == 公寓大樓所在的社區

  • 您的申請 == 公寓大樓

  • 應用程序的暴露端口 == 綜合體中的特定公寓

如果您要查找某人的地址,您會找到用戶的鄰居(在這種情況下,它將是 URL,如果在本地開發,很可能是http://localhost

但是您需要公寓大樓的街道號碼,該號碼是5000 :8080 之類的第一個數字,因此您的應用程序在端口 5000 上暴露在主機操作系統上,朋友的街道地址是 5000,localHost 街道。

但是一旦你到達公寓大樓,你仍然需要知道該敲哪扇門。 您已經到達公寓大樓(您的申請),但您的朋友具體住在哪里? 那是第二個數字, 5000: 8080

因此,您朋友的網絡地址是 URL、主機操作系統中的端口(如果您在本地開發,這是您的計算機,如果不是,它是應用程序運行的任何服務器)和應用程序中公開的端口的組合。

請注意,公寓大樓通常有多個公寓,但仍位於同一地址,因此您的應用程序很可能會暴露多個端口,例如5000:80815000:9000

也有可能不同建築的兩套公寓有相同的公寓號,所以我們可以有5000:80808080:8080 ,這兩種情況都不會導致網絡流量沖突。

這張圖片是我提到的最后一個案例的一個例子

主機上的端口

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM