最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從入門到日常運(yùn)維詳解Docker端口開(kāi)放與端口修改的完全指南

 更新時(shí)間:2026年07月07日 08:54:04   作者:渣渣盟  
Docker 是一個(gè)能讓你把應(yīng)用連根帶環(huán)境打包成集裝箱(容器)的技術(shù),這篇實(shí)戰(zhàn)指南將手把手教你如何修改Docker端口映射,從零搭建到安全避坑全搞定

一、背景:為什么我們要關(guān)心 Docker 端口?

Docker 是一個(gè)能讓你把應(yīng)用連根帶環(huán)境打包成“集裝箱”(容器)的技術(shù)。它有個(gè)關(guān)鍵特性:容器默認(rèn)和宿主機(jī)以及其他容器是網(wǎng)絡(luò)隔離的。也就是說(shuō),你把一個(gè) Web 服務(wù)跑在了容器里的 80 端口,但在你電腦的瀏覽器上直接訪問(wèn) localhost:80 是進(jìn)不去的。

要打通這個(gè)隔閡,就需要端口映射(端口開(kāi)放),把宿主機(jī)(你的云服務(wù)器/本機(jī))的某個(gè)端口,映射到容器里的服務(wù)端口。

改端口的需求通常來(lái)自:

  • 避免端口沖突(比如宿主機(jī) 80 端口已經(jīng)被占用)
  • 安全策略(不想把數(shù)據(jù)庫(kù)的 3306 直接暴露,改成 13306)
  • 同時(shí)運(yùn)行多個(gè)同類容器(3 個(gè) Nginx 分別映射到 8081/8082/8083)

一句話總結(jié):端口映射是外部世界訪問(wèn) Docker 容器的橋梁;修改端口則是這座橋梁的日常維護(hù)和調(diào)整。

二、Docker 安裝(小白版)

如果你的環(huán)境還沒(méi)裝 Docker,下面是兩種主流系統(tǒng)的極簡(jiǎn)安裝法。

CentOS 7 / Rocky Linux

# 1. 卸載舊版本(如果有)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 2. 安裝必要依賴
sudo yum install -y yum-utils

# 3. 添加 Docker 官方倉(cāng)庫(kù)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 4. 安裝 Docker CE(社區(qū)版)
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 5. 啟動(dòng)并設(shè)置開(kāi)機(jī)自啟
sudo systemctl start docker
sudo systemctl enable docker

# 6. 驗(yàn)證安裝
docker version

Ubuntu / Debian

# 1. 卸載舊版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 2. 安裝依賴
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# 3. 添加 Docker 官方 GPG 密鑰
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 4. 設(shè)置倉(cāng)庫(kù)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 安裝 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 6. 啟動(dòng)服務(wù)
sudo systemctl start docker
sudo systemctl enable docker

提示:非 root 用戶每次執(zhí)行 docker 都要加 sudo,如果嫌麻煩,可以把自己加入 docker 組:sudo usermod -aG docker $USER,然后重新登錄生效。

三、核心概念:容器端口 vs 宿主機(jī)端口

先分清兩個(gè)概念,這是理解端口映射的基礎(chǔ):

  • 容器端口:應(yīng)用在容器內(nèi)部監(jiān)聽(tīng)的端口,比如 Nginx 默認(rèn)在容器內(nèi)用 80,MySQL 用 3306。這個(gè)端口號(hào)是寫死在鏡像配置里的,你通常不需要去改它。
  • 宿主機(jī)端口:你服務(wù)器(或虛擬機(jī))對(duì)外暴露的端口,訪問(wèn)者通過(guò) 宿主機(jī)IP:宿主機(jī)端口 才能連上服務(wù)。

Docker 的 -p 參數(shù)就是在這兩者之間建立映射關(guān)系,格式如下:

-p 宿主機(jī)端口:容器端口

來(lái)看一個(gè)跑 Nginx 的例子:

docker run -d --name myweb -p 8080:80 nginx

解釋:

  • -d:后臺(tái)運(yùn)行
  • --name myweb:給容器起名 myweb
  • -p 8080:80:將宿主機(jī)的 8080 端口映射到容器的 80 端口
  • nginx:使用的鏡像名

現(xiàn)在,訪問(wèn) http://你的服務(wù)器IP:8080 就能看到 Nginx 歡迎頁(yè)了。容器里的 80 端口只對(duì)容器內(nèi)部可見(jiàn),但對(duì)宿主機(jī)來(lái)說(shuō),現(xiàn)在 8080 就是它的入口。

四、端口映射的多種玩法

4.1 指定映射接口(綁定 IP)

如果你只想讓本機(jī)訪問(wèn)這個(gè)端口,不讓外網(wǎng)連,可以綁定 127.0.0.1

docker run -d -p 127.0.0.1:3306:3306 --name mysql mysql:8.0

這樣只有服務(wù)器自己用 127.0.0.1:3306 能連上數(shù)據(jù)庫(kù),公網(wǎng)訪問(wèn)被屏蔽,安全性提升。

4.2 映射多個(gè)端口

一個(gè)容器可以映射多個(gè)端口,比如一個(gè)應(yīng)用同時(shí)需要 Web 端口和 API 端口:

docker run -d -p 80:80 -p 443:443 -p 8000:8000 myapp

4.3 動(dòng)態(tài)分配宿主機(jī)端口

如果不想手動(dòng)指定宿主機(jī)端口,讓 Docker 隨機(jī)分配一個(gè),可以用大寫的 -P 配合鏡像內(nèi) EXPOSE 指令:

docker run -d -P nginx

然后用 docker port 容器名 查看自動(dòng)分配了什么端口。

4.4 UDP 端口映射

默認(rèn)映射的是 TCP 端口,如果需要 UDP,加 /udp

docker run -d -p 53:53/udp bind9

同時(shí)映射 TCP 和 UDP 同一個(gè)端口:

docker run -d -p 53:53/tcp -p 53:53/udp bind9

五、如何修改 Docker 容器的端口映射

重要原則:容器本身是靜態(tài)的,一旦運(yùn)行,端口映射規(guī)則無(wú)法直接修改。 所以修改端口 = 重新創(chuàng)建一個(gè)新容器,并掛載同樣的數(shù)據(jù)卷和配置。

幾乎所有生產(chǎn)實(shí)踐都遵循這個(gè)思路,下面給出最安全的操作步驟。

場(chǎng)景:將 Nginx 的宿主機(jī)端口從 8080 改成 8088

當(dāng)前有一個(gè)正在運(yùn)行的容器 myweb,映射為 8080:80,現(xiàn)在希望改成 8088:80。

保留原容器的數(shù)據(jù)(如有掛載卷)

首先檢查容器是否掛載了卷(數(shù)據(jù)目錄):

docker inspect myweb | grep -A 10 Mounts

如果輸出里有 "Source": "/data/nginx/html" 這樣的路徑,說(shuō)明有宿主機(jī)目錄掛載進(jìn)去,這就是你的持久化數(shù)據(jù),一定要記下來(lái)。

如果沒(méi)有掛載任何卷,而且容器內(nèi)已經(jīng)有重要數(shù)據(jù),可以先用 docker cp 把它拷貝出來(lái)。

停止并重命名原容器(留作備份)

docker stop myweb
docker rename myweb myweb_backup

這樣原容器變成一個(gè)不會(huì)啟動(dòng)的備份,隨時(shí)可以恢復(fù)。

用新端口創(chuàng)建全新容器

帶上和原來(lái)一模一樣的掛載參數(shù),加上新的端口映射:

docker run -d --name myweb -p 8088:80 \
  -v /data/nginx/html:/usr/share/nginx/html \
  nginx
  • -v 就是你之前那個(gè)容器用的數(shù)據(jù)卷,路徑必須完全一致。
  • 如果還有環(huán)境變量(-e)、網(wǎng)絡(luò)(--network)等,也都要原樣加上。

驗(yàn)證新容器正常,清理舊備份

curl http://localhost:8088    # 看看是否返回 Nginx 頁(yè)面
docker rm myweb_backup        # 確認(rèn)沒(méi)問(wèn)題后刪除舊容器

如果不想記原來(lái)的啟動(dòng)參數(shù),怎么辦?

可以用 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike 容器名 這個(gè)命令來(lái)自動(dòng)還原出完整的 docker run 命令,然后你只需要改掉 -p 的部分再執(zhí)行即可。

修改容器內(nèi)服務(wù)監(jiān)聽(tīng)的端口(特殊情形)

有時(shí)候你確實(shí)想改容器內(nèi)部應(yīng)用的端口,比如讓 Nginx 監(jiān)聽(tīng) 8080 而不是 80。這需要修改配置文件再配合端口映射。

# 1. 進(jìn)入容器修改 nginx 配置
docker exec -it myweb bash
# 容器內(nèi)執(zhí)行
sed -i 's/listen 80;/listen 8080;/' /etc/nginx/conf.d/default.conf
exit

# 2. 重啟容器讓配置生效
docker restart myweb

# 3. 如果你外部映射保持不變(比如仍映射 80:80),現(xiàn)在服務(wù)就斷了,因?yàn)槟愀牧吮O(jiān)聽(tīng)端口。
# 正確做法是:停止容器,重新創(chuàng)建,映射改為 -p 80:8080
docker stop myweb
docker rm myweb
docker run -d --name myweb -p 80:8080 \
  -v /data/nginx/conf:/etc/nginx/conf.d \
  nginx

通常更推薦用數(shù)據(jù)卷掛載配置文件直接修改宿主機(jī)上的文件,這樣不用進(jìn)容器。

六、日常運(yùn)維常用命令詳解

下面這些命令是排查端口問(wèn)題和日常管理的法寶。

6.1 查看當(dāng)前正在運(yùn)行的容器及端口映射

docker ps

輸出里的 PORTS 列展示映射關(guān)系,例如:

CONTAINER ID   IMAGE     PORTS
abc123         nginx     0.0.0.0:8080->80/tcp

表示宿主機(jī)所有網(wǎng)卡的 8080 端口映射到容器的 80/tcp。

6.2 查看某個(gè)容器的具體端口映射

docker port myweb

輸出:

80/tcp -> 0.0.0.0:8080

6.3 查看容器網(wǎng)絡(luò)詳細(xì)配置

docker inspect myweb | grep -i "ports" -A 20

會(huì)顯示完整的端口綁定信息,包括綁定的 IP 地址。

6.4 查看容器日志(快速定位服務(wù)是否監(jiān)聽(tīng)正常)

docker logs myweb

如果應(yīng)用沒(méi)監(jiān)聽(tīng)在預(yù)期端口,日志里通常會(huì)報(bào)錯(cuò),比如 Address already in use。

6.5 檢查宿主機(jī)端口占用

netstat -tulpn | grep 8080

ss -tulpn | grep 8080

看看某個(gè)宿主機(jī)端口是否被別的進(jìn)程占用,避免映射失敗。

6.6 從宿主機(jī)測(cè)試容器端口連通性

curl localhost:8080

telnet localhost 8080

6.7 Docker Compose 中的端口配置

如果用 docker-compose.yml 管理容器,端口部分這樣寫:

services:
  web:
    image: nginx
    ports:
      - "8080:80"
      - "443:443"

修改端口只需編輯這個(gè)文件,然后執(zhí)行:

docker-compose down
docker-compose up -d

數(shù)據(jù)會(huì)保留在有命名卷或綁定掛載的目錄里,容器會(huì)被重新創(chuàng)建,端口映射立即更新。

七、常見(jiàn)問(wèn)題與避坑指南

Q:?jiǎn)?dòng)容器時(shí)報(bào)錯(cuò)“port is already allocated”怎么辦?

A:說(shuō)明宿主機(jī)端口已被占用,換個(gè)空閑端口,或者先用 sudo lsof -i:端口號(hào) 找到占用進(jìn)程并停止它。

Q:容器里服務(wù)監(jiān)聽(tīng)在 127.0.0.1 而不是 0.0.0.0,外部能訪問(wèn)嗎?

A:不能。容器內(nèi)的服務(wù)必須監(jiān)聽(tīng)在 0.0.0.0 才能被 Docker 的端口映射轉(zhuǎn)發(fā),如果只監(jiān)聽(tīng) 127.0.0.1,就需要修改應(yīng)用配置。

Q:能多個(gè)容器映射同一個(gè)宿主機(jī)端口嗎?

A:絕對(duì)不行,端口是獨(dú)占資源。但可以通過(guò)反向代理(比如 Nginx、Traefik)根據(jù)域名或路徑轉(zhuǎn)發(fā)到不同容器的內(nèi)部端口,實(shí)現(xiàn)端口復(fù)用。

Q:修改端口后忘了掛載數(shù)據(jù)卷,數(shù)據(jù)丟了怎么辦?

A:如果原容器還在(沒(méi)有刪除),可以用 docker cp 把數(shù)據(jù)拷貝出來(lái)。如果已經(jīng) rm 了但沒(méi)清理卷,可以用 docker volume ls 找到之前的匿名卷,再掛載新容器恢復(fù)。刪除容器時(shí)用 docker rm -v 才會(huì)同時(shí)刪除匿名卷,所以平時(shí)不要輕易加 -v。

八、總結(jié)

Docker 的端口開(kāi)放與修改,本質(zhì)上就是在宿主機(jī)和容器之間建立并調(diào)整映射關(guān)系。牢記以下幾點(diǎn):

  1. 端口映射通過(guò) -p 參數(shù)在容器創(chuàng)建時(shí)指定,運(yùn)行后無(wú)法直接改變。
  2. 修改端口 = 停止舊容器 → 用相同數(shù)據(jù)卷啟動(dòng)新容器,映射新端口。
  3. 善用 docker psdocker port、docker inspect 排查問(wèn)題。
  4. 生產(chǎn)環(huán)境盡量用 Docker Compose 或編排工具管理端口,方便版本控制和快速變更。

掌握了這些,你就拿到了 Docker 網(wǎng)絡(luò)通信的鑰匙,無(wú)論是搭建環(huán)境還是調(diào)試疑難雜癥,都能應(yīng)對(duì)自如。動(dòng)手試試,在服務(wù)器上啟動(dòng)兩個(gè)不同端口的 Nginx 玩玩,很快就能熟能生巧了!

到此這篇關(guān)于從入門到日常運(yùn)維詳解Docker端口開(kāi)放與端口修改的完全指南的文章就介紹到這了,更多相關(guān)Docker端口開(kāi)放與修改內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解如何獲取docker鏡像中的jar包

    一文詳解如何獲取docker鏡像中的jar包

    本人在工作中遇到了需要在docker查看jar這種操作,查看了許多資料,終于還是找到了,下面這篇文章主要給大家介紹了關(guān)于如何獲取docker鏡像中jar包的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • 一篇文章看懂docker?run的使用方法

    一篇文章看懂docker?run的使用方法

    在Docker中,run應(yīng)該是用戶使用最多的命令了,很多人不是很明白run命令的用法,這篇文章主要介紹了關(guān)于docker?run的使用方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • Docker創(chuàng)建openresty容器的實(shí)現(xiàn)步驟

    Docker創(chuàng)建openresty容器的實(shí)現(xiàn)步驟

    OpenResty可以用來(lái)構(gòu)建高性能的Web應(yīng)用和服務(wù),本文主要介紹了Docker創(chuàng)建openresty容器的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 如何解決docker logs無(wú)法實(shí)時(shí)輸出腳本打印的內(nèi)容

    如何解決docker logs無(wú)法實(shí)時(shí)輸出腳本打印的內(nèi)容

    這篇文章主要介紹了如何解決docker logs無(wú)法實(shí)時(shí)輸出腳本打印的內(nèi)容問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Centos系統(tǒng)docker時(shí)間同步方案

    Centos系統(tǒng)docker時(shí)間同步方案

    本文主要介紹了Centos系統(tǒng)docker時(shí)間同步方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-06-06
  • Docker中cgroups資源控制實(shí)戰(zhàn)

    Docker中cgroups資源控制實(shí)戰(zhàn)

    cgroups是Linux內(nèi)核的功能,允許用戶管理和限制進(jìn)程組資源使用,支持資源限制、優(yōu)先級(jí)控制、資源記錄等,應(yīng)用廣泛,Docker和k8s等容器技術(shù),通過(guò)cgroups實(shí)現(xiàn)精細(xì)的資源控制,本文就來(lái)詳細(xì)的介紹一下
    2024-11-11
  • Docker安裝RabbitMQ后訪問(wèn)報(bào)錯(cuò)的最佳解決方案

    Docker安裝RabbitMQ后訪問(wèn)報(bào)錯(cuò)的最佳解決方案

    這篇文章主要介紹了Docker安裝RabbitMQ后訪問(wèn)報(bào)錯(cuò)的最佳解決方案,錯(cuò)誤通常是由于RabbitMQ的安全配置導(dǎo)致的,RabbitMQ默認(rèn)配置允許的用戶僅能通過(guò)localhost訪問(wèn),文中通過(guò)圖文講解的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • Docker啟動(dòng)容器報(bào)錯(cuò):Ports are not available的解決方案

    Docker啟動(dòng)容器報(bào)錯(cuò):Ports are not available的解決方案

    這篇文章主要介紹了Docker啟動(dòng)容器報(bào)錯(cuò):Ports are not available的解決方案,Docker 將容器程序的端口號(hào)映射到宿主機(jī)的端口號(hào),是一個(gè) NAT 過(guò)程,這個(gè)過(guò)程可能會(huì)因?yàn)榕c Windows NAT 服務(wù)沖突而失效,文中有詳細(xì)的解決方案,需要的朋友可以參考下
    2024-03-03
  • Docker匿名掛載和具名掛載的具體使用

    Docker匿名掛載和具名掛載的具體使用

    Docker的掛載是將容器內(nèi)的目錄和宿主機(jī)的目錄進(jìn)行綁定,本文主要介紹了Docker匿名掛載和具名掛載的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • docker?images的常用方式

    docker?images的常用方式

    這篇文章主要介紹了docker?images的常用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

灌南县| 万全县| 通许县| 黄龙县| 长治市| 临武县| 开封县| 黔江区| 十堰市| 鹿邑县| 时尚| 宜君县| 英德市| 诸暨市| 尚志市| 秭归县| 木里| 资源县| 晴隆县| 永兴县| 竹山县| 甘德县| 新津县| 宁武县| 斗六市| 客服| 沁源县| 柏乡县| 谢通门县| 武邑县| 安顺市| 南平市| 福泉市| 樟树市| 石景山区| 婺源县| 汉沽区| 宾阳县| 天全县| 正定县| 永昌县|