當一臺服務器上部署了多個應用容器,它們直接可能須要相互通訊,好比web應用容器須要訪問mysql數據庫容器。html
# 將主機的127.0.0.1:5001映射到容器的5000端口 docker run -p 127.0.0.1:5001:5000 training/webapp python app.py # 將主機的80映射到容器的80端口 docker run -p 80:80 training/webapp python app.py # 容器內部端口隨機映射到主機的高端口,經過ps查看 docker run -P training/webapp python app.py
若是咱們建立一個容器後想要修改建立的配置怎麼辦呢?好比修改mongodb的端口映射:python
docker stop mongodb # 中止容器 systemctl stop docker # 中止docker vi /var/lib/docker/containers/容器id/hostconfig.json # 全部的配置在hostconfig.json文件中 找到端口映射進行修改 systemctl start docker # 重啓docker docker start mongodb # 重啓容器
# 進入容器打開一個交互終端 docker exec -i -t (容器的ID/names) /bin/bash
docker安裝後,會自動建立一個默認的bridge網絡docker0。對應的地址爲172.17.0.X,容器之間能夠經過這個內部ip進行相互訪問,可是若是想要鏈接另外一個容器就必須先知道對方的ip地址,這一點有點麻煩。mysql
ifconfig # 查看內部ip,若是沒有ifconfig命令,先安裝 apt update apt install net-tools
# 使用nginx鏡像建立一個容器,名爲test1,鏈接到test2容器,指定test2容器的別名爲web docker run --name test1 --link test2:web nginx # 登陸test1 env | grep web # 查看web的狀況,發現存在相關信息 cat /etc/hosts # 能夠看到web別名對應的ip,可是這個ip是靜態的,也就是不支持test2容器重啓,由於重啓可能形成ip發生變化 # 登陸test2發現沒有test1的信息,說明test2不能經過別名訪問test1
因爲使用默認的內部網絡link是靜態ip,不支持重啓,能夠建立本身的內部網絡指定別名。nginx
# 建立一個網絡,能夠經過ifconfig查看 docker network create tms # 容器啓動指定網絡 docker run --network tms --network-alias test1 nginx # network指定網絡,network-alias指定容器的別名 # 斷開容器的網絡鏈接 docker network disconnet tms 容器ID/name # 刪除網絡 docker network rm tms # 測試 ping test1 # 能夠直接使用別名代替ip
若是要刪除網絡必須全部的docker容器所有斷開網絡。web