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

從入門到日常運維詳解Docker端口開放與端口修改的完全指南

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

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

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

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

改端口的需求通常來自:

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

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

二、Docker 安裝(小白版)

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

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 官方倉庫
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. 啟動并設(shè)置開機自啟
sudo systemctl start docker
sudo systemctl enable docker

# 6. 驗證安裝
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è)置倉庫
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. 啟動服務(wù)
sudo systemctl start docker
sudo systemctl enable docker

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

三、核心概念:容器端口 vs 宿主機端口

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

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

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

-p 宿主機端口:容器端口

來看一個跑 Nginx 的例子:

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

解釋:

  • -d:后臺運行
  • --name myweb:給容器起名 myweb
  • -p 8080:80:將宿主機的 8080 端口映射到容器的 80 端口
  • nginx:使用的鏡像名

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

四、端口映射的多種玩法

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

如果你只想讓本機訪問這個端口,不讓外網(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ù)庫,公網(wǎng)訪問被屏蔽,安全性提升。

4.2 映射多個端口

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

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

4.3 動態(tài)分配宿主機端口

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

docker run -d -P nginx

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

4.4 UDP 端口映射

默認映射的是 TCP 端口,如果需要 UDP,加 /udp

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

同時映射 TCP 和 UDP 同一個端口:

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

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

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

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

場景:將 Nginx 的宿主機端口從 8080 改成 8088

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

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

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

docker inspect myweb | grep -A 10 Mounts

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

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

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

docker stop myweb
docker rename myweb myweb_backup

這樣原容器變成一個不會啟動的備份,隨時可以恢復(fù)。

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

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

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

驗證新容器正常,清理舊備份

curl http://localhost:8088    # 看看是否返回 Nginx 頁面
docker rm myweb_backup        # 確認沒問題后刪除舊容器

如果不想記原來的啟動參數(shù),怎么辦?

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

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

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

# 1. 進入容器修改 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ù)就斷了,因為你改了監(jiān)聽端口。
# 正確做法是:停止容器,重新創(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ù)卷掛載配置文件直接修改宿主機上的文件,這樣不用進容器。

六、日常運維常用命令詳解

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

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

docker ps

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

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

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

6.2 查看某個容器的具體端口映射

docker port myweb

輸出:

80/tcp -> 0.0.0.0:8080

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

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

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

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

docker logs myweb

如果應(yīng)用沒監(jiān)聽在預(yù)期端口,日志里通常會報錯,比如 Address already in use。

6.5 檢查宿主機端口占用

netstat -tulpn | grep 8080

ss -tulpn | grep 8080

看看某個宿主機端口是否被別的進程占用,避免映射失敗。

6.6 從宿主機測試容器端口連通性

curl localhost:8080

telnet localhost 8080

6.7 Docker Compose 中的端口配置

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

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

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

docker-compose down
docker-compose up -d

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

七、常見問題與避坑指南

Q:啟動容器時報錯“port is already allocated”怎么辦?

A:說明宿主機端口已被占用,換個空閑端口,或者先用 sudo lsof -i:端口號 找到占用進程并停止它。

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

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

Q:能多個容器映射同一個宿主機端口嗎?

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

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

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

八、總結(jié)

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

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

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

到此這篇關(guān)于從入門到日常運維詳解Docker端口開放與端口修改的完全指南的文章就介紹到這了,更多相關(guān)Docker端口開放與修改內(nèi)容請搜索腳本之家以前的文章或繼續(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的使用方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • Docker創(chuàng)建openresty容器的實現(xiàn)步驟

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

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

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

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

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

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

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

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

    Docker安裝RabbitMQ后訪問報錯的最佳解決方案

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

    Docker啟動容器報錯:Ports are not available的解決方案

    這篇文章主要介紹了Docker啟動容器報錯:Ports are not available的解決方案,Docker 將容器程序的端口號映射到宿主機的端口號,是一個 NAT 過程,這個過程可能會因為與 Windows NAT 服務(wù)沖突而失效,文中有詳細的解決方案,需要的朋友可以參考下
    2024-03-03
  • Docker匿名掛載和具名掛載的具體使用

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

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

    docker?images的常用方式

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

最新評論

河南省| 岳西县| 江孜县| 鄱阳县| 江华| 嘉善县| 林州市| 鸡泽县| 桂平市| 贵南县| 林口县| 松原市| 班戈县| 府谷县| 安仁县| 邮箱| 黑龙江省| 仁怀市| 平谷区| 东城区| 大关县| 塘沽区| 绥宁县| 溆浦县| 新建县| 唐山市| 雷山县| 浦县| 吉安县| 瑞昌市| 隆化县| 新密市| 云南省| 容城县| 静安区| 赤水市| 昌黎县| 安远县| 宿迁市| 宁阳县| 桐庐县|