Docker目前提供的网络服务包括: 容器端口映射宿主机端口和容器之间互联两种方式。
1. 端口映射访问容器
容器在启动的时候如未指定对应参数是不能在外部访问容器内进程的。
在容器启动时可以使用参数-P和-p将容器的端口映射到宿主机,实现外部和容器内进程的通信。
-P : 容器映射到宿主机的端口由宿主机分配。
-p : 用户在启动容器时指定映射到宿主机的端口。
-P:
docker run -ti --name "c1" -P centos:tag1 /bin/bash
查看端口映射情况:
docker ps -l
查看容器某个端口的映射信息:
docker port c1 7000
-p:
docker run -ti --name "c2" -p 5000:4000 centos:tag1 /bin/bash
容器启动时映射多个端口到宿主机:
docker run -ti -p 21000:3000 -p 22000:4000 --name "c3" centos:tag1 /bin/bash
容器端口映射到指定主机的指定端口:
docker run -ti --name "c4" -p 127.0.0.1:21000:2000 centos:tag1 /bin/bash
容器端口映射到指定主机的任意端口:
docker run -ti --name "c5" -p 127.0.0.1::2000 /centos:tag1 bin/bash
2. 容器间互联实现容器通信
此种方式会在源和接收容器之间建立一个隧道,接收容器通过此隧道获取源容器指定的信息。
--rm参数和-d参数在docker run时不可一起使用。
容器在启动时通过参数--link实现互联:
启动从c1:
docker run -ti --name "c5" centos:tag1 /bin/bash
启动c2实现与c1互联:
docker run -ti --name "c2" --link c1:c1 centos:tag1 /bin/bash #c1:c1=> 源容器名字:源容器名字别名
检查容器c1和c2是否互联:
方法一: ping
默认情况下容器c1和c2中没有安装命令ping和ifconfig。
在容器c1和c2中安装网络工具:
yum install -y net-tools
ping对方看是否ping通。
方法二: /etc/hosts
查看c2文件/etc/hosts, 如c1与c2实现互联则此文件中会出现c1的信息。
扩展: 一个容器可以与多个容器互联