docker多個容器的相互通信

在同一臺宿主機上運行多個 Docker 容器時,容器之間可以通過以下幾種方式實現通信:


1. 使用 Docker 默認網絡(Bridge 網絡)

Docker 默認會為每個容器分配一個 bridge 網絡,容器可以通過 IP 地址或容器名稱互相通信。

實現步驟
  1. 創建容器時,Docker 會自動將其連接到默認的 bridge 網絡。
  2. 容器之間可以通過 容器名稱IP 地址 通信。
示例
  • 啟動兩個容器:
    docker run -d --name container1 nginx
    docker run -d --name container2 nginx
    
  • container1 中訪問 container2
    docker exec -it container1 ping container2
    
注意事項
  • 默認的 bridge 網絡不支持通過容器名稱直接通信(需要使用 --link,但已不推薦)。
  • 推薦使用自定義網絡(見下文)。

2. 使用自定義 Docker 網絡

Docker 允許用戶創建自定義網絡,容器連接到同一自定義網絡后,可以通過容器名稱直接通信。

實現步驟
  1. 創建自定義網絡:
    docker network create mynetwork
    
  2. 啟動容器并連接到自定義網絡:
    docker run -d --name container1 --network mynetwork nginx
    docker run -d --name container2 --network mynetwork nginx
    
  3. 容器之間通過容器名稱通信:
    • container1 中訪問 container2
      docker exec -it container1 ping container2
      
優點
  • 支持通過容器名稱直接通信。
  • 網絡隔離性好,安全性高。

3. 使用 --link 參數(不推薦)

Docker 早期支持通過 --link 參數將容器連接在一起,但這種方式已被棄用,推薦使用自定義網絡。

示例
  • 啟動容器并使用 --link
    docker run -d --name container1 nginx
    docker run -d --name container2 --link container1 nginx
    
  • container2 中訪問 container1
    docker exec -it container2 ping container1
    
缺點
  • 功能有限,不支持動態更新。
  • 已不推薦使用。

4. 使用 Host 網絡

將容器連接到宿主機的網絡棧,容器直接使用宿主機的網絡接口。

實現步驟
  • 啟動容器時使用 --network host
    docker run -d --name container1 --network host nginx
    docker run -d --name container2 --network host nginx
    
  • 容器之間可以通過 localhost 或宿主機的 IP 地址通信。
注意事項
  • 容器與宿主機共享網絡棧,可能會導致端口沖突。
  • 安全性較低,不推薦在生產環境中使用。

5. 使用 Docker Compose

Docker Compose 是管理多容器應用的理想工具,它會自動為容器創建自定義網絡,并通過服務名稱實現容器通信。

實現步驟
  1. 創建 docker-compose.yml 文件:
    version: '3'
    services:web:image: nginxports:- "8080:80"db:image: mysqlenvironment:MYSQL_ROOT_PASSWORD: example
    
  2. 啟動服務:
    docker-compose up -d
    
  3. web 服務中訪問 db 服務:
    • 直接使用服務名稱 db 作為主機名:
      docker-compose exec web ping db
      
優點
  • 自動創建自定義網絡,容器之間通過服務名稱通信。
  • 簡化多容器應用的管理。

6. 使用共享數據卷(間接通信)

如果容器之間需要共享數據,可以通過掛載同一個數據卷實現間接通信。

實現步驟
  1. 創建數據卷:
    docker volume create mydata
    
  2. 啟動容器并掛載數據卷:
    docker run -d --name container1 -v mydata:/app/data nginx
    docker run -d --name container2 -v mydata:/app/data nginx
    
  3. 容器之間通過共享的文件系統通信。

總結

通信方式實現方法優點缺點
默認 Bridge 網絡容器通過 IP 或名稱通信簡單易用默認不支持容器名稱通信
自定義網絡創建自定義網絡,容器通過名稱通信支持容器名稱通信,網絡隔離性好需要手動創建網絡
–link(不推薦)使用 --link 連接容器早期支持容器名稱通信功能有限,已棄用
Host 網絡容器共享宿主機網絡棧直接使用宿主機網絡安全性低,可能導致端口沖突
Docker Compose自動創建網絡,容器通過服務名通信簡化多容器管理,支持服務名稱通信需要編寫 docker-compose.yml 文件
共享數據卷容器通過共享文件系統通信適合共享數據場景僅適用于文件系統通信

推薦方案

  • 開發環境:使用 Docker Compose,簡化多容器管理。
  • 生產環境:使用自定義網絡,確保網絡隔離和安全性。
  • 特殊場景:如果需要共享數據,可以使用共享數據卷。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/68185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/68185.shtml
英文地址,請注明出處:http://en.pswp.cn/web/68185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Elasticsearch 開放推理 API 增加了 Azure AI Studio 支持

作者:來自 Elastic Mark Hoy Elasticsearch 開放推理 API 現已支持 Azure AI Studio。在此博客中了解如何將 Azure AI Studio 功能與 Elasticsearch 結合使用。 作為我們持續致力于為 Microsoft Azure 開發人員提供他們選擇的工具的一部分,我們很高興地宣…

基于Bootstrap + Java + Oracle實現的電商平臺

以下是基于Bootstrap Java Oracle實現的電商平臺開發方案(簡化版): 一、系統架構設計 前端:Bootstrap 5 jQuery 后端:Java Spring Boot 數據庫:Oracle 19c 自動化:Spring Scheduler Oracle…

JUC學習筆記02

文章目錄 JUC筆記2練習題:手寫線程池代碼解釋:AdvancedThreadPool 類:WorkerThread 內部類:AdvancedThreadPoolExample 類: 線程池的思考CPU密集型IO密集型 練習題:手寫自動重試機練習題:手寫定…

【Unity】從父對象中獲取子對象組件的方式

1.GetComponentInChildren 用于獲取對與指定組件或游戲對象的任何子級相同的游戲對象上的組件類型的引用。 該方法在Unity腳本API的聲明格式為: public T GetComponentInChildren(bool includeInactive false) includeInactive參數(可選&#xff09…

Redis性能優化

1.是否使用復雜度過高的命令 首先,第一步,你需要去查看一下 Redis 的慢日志(slowlog)。 Redis 提供了慢日志命令的統計功能,它記錄了有哪些命令在執行時耗時比較久。 查看 Redis 慢日志之前,你需要設置慢…

baigeiRSA

baigeiRSA 打開附件有兩個: 1.import libnumfrom Crypto.Util import numberfrom secret import flag?size 128e 65537p number.getPrime(size)q number.getPrime(size)n p*q?m libnum.s2n(flag)c pow(m, e, n)?print(n %d % n)print(c %d % c)??2.n…

【csp-j學習完C++語法后,如何進階學習C++算法和數據結構?】

在掌握了 CSP - J 的 C 語法基礎后,接下來的進階學習需要系統地掌握各類算法和數據結構知識,并通過大量練習來鞏固和提高應用能力。以下是一份詳細的進階學習規劃: 第一階段:基礎算法學習(1 - 2 個月) 排…

QT中解決使用QCustomplot繪制高速大量數據時頻譜圖卡頓問題

[!!!核心方法!!!] 使用帶參數的replot()函數繪制m_pCustomPlot>replot(QCustomPlot::rpQueuedReplot) 1. replot() 方法 void QCustomPlot::replot(QCustomPlot::RefreshPriority refreshPriority rp…

【AI】卷積神經網絡CNN

不定期更新,建議關注收藏點贊。 目錄 零碎小組件經驗總結早期的CNN 零碎小組件 全連接神經網絡 目前已經被替代。 每個神經元都有參與,但由于數據中的特征點變化大,全連接神經網絡把所有數據特征都學習了,故效果不好。感受野&…

YOLOv11-ultralytics-8.3.67部分代碼閱讀筆記-downloads.py

downloads.py ultralytics\utils\downloads.py 目錄 downloads.py 1.所需的庫和模塊 2.def is_url(url, checkFalse): 3.def delete_dsstore(path, files_to_delete(".DS_Store", "__MACOSX")): 4.def zip_directory(directory, compressTrue, ex…

微信小程序~電器維修系統小程序

博主介紹:?程序猿徐師兄、8年大廠程序員經歷。全網粉絲15w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? 🍅文末獲取源碼聯系🍅 👇🏻 精彩專欄推薦訂閱👇…

VDN 微服務架構搭建篇(三)基于 Nacos 的 Spring Cloud Gateway 動態路由管理

VDN 微服務架構搭建篇(三):基于 Nacos 的 Spring Cloud Gateway 動態路由管理 在微服務架構中,網關 是整個系統的入口,負責 流量管理、請求路由、安全控制等關鍵功能。 Spring Cloud Gateway 作為 Spring 生態官方推薦…

LLAMA-Factory安裝教程(解決報錯cannot allocate memory in static TLS block的問題)

步驟一: 下載基礎鏡像 # 配置docker DNS vi /etc/docker/daemon.json # daemon.json文件中 { "insecure-registries": ["https://swr.cn-east-317.qdrgznjszx.com"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.c…

Java高頻面試之SE-18

hello啊,各位觀眾姥爺們!!!本baby今天又來了!哈哈哈哈哈嗝🐶 BIO NIO AIO的區別? 在 Java 網絡編程中,BIO、NIO 和 AIO 是三種不同的 I/O 模型,它們的核心區別在于 阻塞…

藍橋杯刷題DAY3:Horner 法則 前綴和+差分數組 貪心

所謂刷題,最重要的就是細心 📌 題目描述 在 X 進制 中,每一數位的進制不固定。例如: 最低位 采用 2 進制,第二位 采用 10 進制,第三位 采用 8 進制, 則 X 進制數 321 的十進制值為&#xff…

BUU24 [GXYCTF2019]BabyUpload 1

開局上傳文件 上傳muma.php 上傳.htaccess文件也被打回 再次求助互聯網,才發現這提示給的多么明顯,上傳.htaccess文件是檢查文件類型(Contnet-Type),上傳muma.php是檢查后綴里頭有沒有ph ,檢查文件類型那…

RabbitMQ 從入門到精通:從工作模式到集群部署實戰(三)

文章目錄 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安裝兼容的 Erlang/OTP版本。 這些工具假定系統區域設置為 UTF-8(例如en…

3.攻防世界 weak_auth

題目描述提示 是一個登錄界面,需要密碼登錄 進入題目頁面如下 弱口令密碼爆破 用1 or 1 #試試 提示用admin登錄 則嘗試 用戶名admin密碼:123456 直接得到flag 常用弱口令密碼(可復制) 用戶名 admin admin-- admin or -- admin…

優化深度神經網絡

訓練集、開發集(驗證集)、測試集 偏差與方差 正則化 L2正則 Dropout 隨機丟棄部分神經元輸入,經常用于計算機視覺的神經網絡內,因為通常沒有足夠的訓練數據,很容易出現過擬合的問題 數據增強 訓練集規一化 可以使其圖像更均勻,…

【玩轉 Postman 接口測試與開發2_018】第14章:利用 Postman 初探 API 安全測試

《API Testing and Development with Postman》最新第二版封面 文章目錄 第十四章 API 安全測試1 OWASP API 安全清單1.1 相關背景1.2 OWASP API 安全清單1.3 認證與授權1.4 破防的對象級授權(Broken object-level authorization)1.5 破防的屬性級授權&a…