docker容器的互联
准备的docker容器环境
FROM ubuntu:14.04
RUN apt-get install -y ping
RUN apt-get update
RUN apt-get install -y nginx
RUN apt-get install -y curl
EXPOSE 80
CMD /bin/bash
docker容器互联的默认方式
--icc=true 默认(允许连接)
当停止一个容器后容器的ip地址会改变
容器重启后可以继续访问
解决因为重启IP改变连接不变的问题
使用link选项
包含了容器名以及我们希望为这个容器指定的代号,
$docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMOND]
如果指定了link选项,我们就可以在新启动的容器中,以我们所指定的代号来访问相应的容器。避免因为ip地址的变化而带来的影响
例子:
$docker run -it --name 容器名 --link=要连接的容器:给要连接容器起的别名 镜像名称
这时在新的容器中就可以通过别名进行访问
ping 要连接容器的别名
link造成的影响
1.在容器启动时docker添加了一些环境变量 evn可以查看
2.docker添加了新容器的地址映射 vim /etc/hosts
重启容器后发现,还可以使用别名连接。但是hosts文件里面的ip映射发生了改变。(当重启后,docker会自动更改环境变量、ip地址和指定的别名之间的映射)
拒绝容器之间的连接
--icc=false
1.修改docker启动配置文件
$sudo vim /etc/default/docker
2.在末尾添加配置
DOCKER_OPTS=" --icc=false"
3.重启docker的服务
$sudo service docker restart
4.查看配置是否使用
$ps -ef | grep docker
允许特定的容器间的连接
需要三个配置
1.--icc=false
2.--iptables=true(linux中用来控制网络访问的)
3.运行容器时使用 --link(以前采用link选项的在允许特定访问配置后还可以正常访问)
原理:docker运用iptables中的机制,在icc等于false时。阻断docker中容器之间的访问,仅仅允许利用link选项配置的容器进行相互的访问
操作流程:
1.修改docker启动配置文件
$sudo vim /etc/default/docker
2.添加--iptables的设置
DOCKER_OPTS=" --icc=false --iptables=true"
3.重启docker的服务
$sudo service docker restart
4.查看配置是否使用
$ps -ef | grep docker
5.利用link选项运行一个新容器
$docker run -it --name cct4 --link=cct1:webtest jingxiang
配置后不能访问解决:
1.查看宿主机的iptaables
$sudo iptables -L -n
(第一项FOREARD,docker不是第一个)
2.清空iptaables设置
$sudo iptables -F
3.查看宿主机的iptaables
$sudo iptables -L -n
(刚才的设置已经没有)
4.重启docker的服务
$sudo service docker restart
5.查看宿主机的iptaables
$sudo iptables -L -n
(docker 已经归在第一位)
6.启动docker容器
7.curl 容器别名就可以正常访问
网友评论