預設情況容器和主機之間的網路通訊是封閉的, 如果要讓容器能夠被外部網路訪問, 需要在啟動容器的時候指定要開放的埠, 這樣我們就能通過主機的網路訪問容器內提供的的服務了.我們在容器中執行了乙個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
命令列出指定容器的環境變數:
1path=/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命令,該映象對應...