Docker 容器之間的通訊

2021-08-27 18:09:06 字數 1993 閱讀 5400

預設情況容器和主機之間的網路通訊是封閉的, 如果要讓容器能夠被外部網路訪問, 需要在啟動容器的時候指定要開放的埠, 這樣我們就能通過主機的網路訪問容器內提供的的服務了.我們在容器中執行了乙個web伺服器,使用者需要訪問這個容器內的資源, 這裡為了方便,直接使用官方手冊裡的示例:

1

命令列分解:

本文把docker服務所在的作業系統成為宿主系統, 通過-p標誌繫結埠又如下幾種方式:

1
-p 127.0.0.1:5000:5000

1
-p 127.0.0.1::5000

1
-p 5000:5000

1
-p 127.0.0.1:5000:5000/udp

1
-p 127.0.0.1:5000:5000 -p 127.0.0.1:5001:5001

網路埠不是容器之間相互鏈結的唯一方式, docker 還有乙個鏈結系統能夠把多個容器鏈結到一起.通過linking, 容器之間能夠相互發現,並能夠安全地傳輸資訊. 當建立linking時,實際上是在容器和目標容器之間建立了一根管道(conduit). 要建立linking,需要使用--link標誌, 首先建立乙個新容器,其中包含我們要訪問的資料庫:

從映象training/postgres建立乙個叫做db的容器, 其中包含postgresql資料庫.

1
docker run -d --name db training/postgres:latest

建立乙個web容器,並鏈結到db容器

1

要建立容器之間的鏈結,必須在啟動時通過引數--name $container_name給容器命名,例如:

1

--link標誌的形式如下:

1
--link name:alias

其中name為被鏈結的容器名稱alias為鏈結的別名

我們啟動db容器的時候並沒有指定-p-p引數,在這個例子中,web容器作為接受者(recipient)把自己的資訊暴露給作為source(源)db, docker在兩個容器之間建立了乙個安全的隧道,這是鏈結的巨大優勢, 通過連線,我們不需要向外部網路暴露埠.

docker通過兩種方式把鏈結暴露給recipient(接受者)容器:

docker設定了一堆環境變數, 可以使用env命令列出指定容器的環境變數:

1
path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

hostname=7f3a2434b08a

db_port=tcp:

db_port_5432_tcp=tcp:

db_port_5432_tcp_addr=172.17.0.21

db_port_5432_tcp_port=5432

db_port_5432_tcp_proto=tcp

db_name=/web2/db

db_env_pg_version=9.3

home=/

**:

Docker 同一主機不同容器之間的通訊

解決問題 解決同一主機不同容器之間的通訊 當在本機執行乙個web的映象,想要訪問mysql映象的時候如果使用127.0.0.1 3306來連線mysql是連線不上的。最好的解決辦法就是將mysql服務放在另外乙個主機上,但是畢竟。也沒有那麼多裝置。使用docker inspect 容器名 id 可以...

docker容器之間的訪問

乙個簡單的python web應用,需要訪問redis,web應用與redis應用在不同的容器中,下面實現兩個容器的訪問。from flask import flask from redis import redis import os import socket dockerfile 2 啟動re...

Docker容器之間互訪

準備部署基於springboot nacos redis mysql程式,每個元件都分別放到指定容器中,此時就遇到了乙個問題,那就是容器之間怎麼才能互相訪問?下面介紹一下容器互訪的解決方式。本文使用的centos是自定義的centos映象,可以直接在容器中使用vim,ifconfig命令,該映象對應...