当一台服务器上部署了多个应用容器,它们直接可能须要相互通讯,好比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