默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。
容器访问外部实现
容器所有到外部网络的连接,源地址都会被NAT成本地系统的IP地址。这是使用 iptables 的源地址伪装操作实现的。
查看主机的 NAT 规则。
$ sudo iptables -t nat -nL
…
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all — 172.17.0.0/16 !172.17.0.0/16
…
其中,上述规则将所有源地址在 172.17.0.0/16 网段,目标地址为其他网段(外部网络)的流量动态伪装为从系统网卡发出。MASQUERADE 跟传统 SNAT 的好处是它能动态从网卡获取地址。
外部访问容器实现
容器允许外部访问,可以在 docker run 时候通过 -p 或 -P 参数来启用。
不管用那种办法,其实也是在本地的 iptable 的 nat 表中添加相应的规则。
使用 -P 时:

使用 -p 80:80 时:

注意:
- 这里的规则映射了 0.0.0.0,意味着将接受主机来自所有接口的流量。用户可以通过 -p IP:host_port:container_port 或 -p IP::port 来指定允许访问容器的主机上的 IP、接口等,以制定更严格的规则。
- 如果希望永久绑定到某个固定的 IP 地址,可以在 Docker 配置文件 /etc/default/docker 中指定DOCKER_OPTS=”–ip=IP_ADDRESS” ,之后重启 Docker 服务即可生效。
| Docker入门教程 | ||
| Docker简介 | Docker基本概念 | Docker安装 |
| 什么是Docker | i.镜像 | 使用Debian操作系统安装Docker |
| 为什么要用Docker | ii.容器 | 使用CentOS操作系统安装Docker |
| iii.仓库 | 使用Ubuntu操作系统安装Docker | |
| Docker images镜像详细介绍 | Docker容器 | Docker仓库 |
| 获取Docker images | Docker容器启动 | Docker Hub |
| 查找Docker images | Docker容器新建 | 私有仓库 |
| 下载Docker images | Docker容器终止 | Docker配置文件 |
| 创建我们自己的Docker images | Docker容器进入容器 | |
| Docker容器导出和导入 | ||
| Docker容器删除 | ||
| Docker数据管理 | Docker网络 | Docker高级网络配置 |
| 数据卷容器 | 外部访问容器 | 快速配置指南 |
| 数据卷备份、恢复、迁移 | 容器互联 | 配置 DNS |
| 容器访问控制 | ||
| 端口映射实现 | ||
| 配置 docker0 网桥 | ||
| 自定义网桥 | ||
| 实例:创建一个点到点连接 | ||
| Docker安全 | Dockerfile | Docker底层实现 |
| i. 内核名字空间 | i. 基本结构 | i. 基本架构 |
| ii. 控制组 | ii. 指令 | ii. 名字空间 |
| iii. 服务端防护 | iii. 创建镜像 | iii. 控制组 |
| iv. 内核能力机制 | iv. 联合文件系统 | |
| v. 其它安全特性 | v. 容器格式 | |
| vi. 总结 | 网络 | |
| Docker实战案例 | ||
| 使用 Supervisor 来管理进程 | ||
| 创建 tomcat/weblogic 集群 | ||
| 多台物理主机之间的容器互联 | ||
| 标准化开发测试和生产环境 | ||
DockerInfo
评论前必须登录!
注册