创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头。

我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器的ip地址。

假设某个容器(假设容器的名称为myweb)被分配的地址是 172.17.0.2,该容器上启动了一个web服务,其端口号是80(注意这是容器中的端口号)。

这时我们用docker port命令可以查看该web服务在容器的端口对应到主机端口的信息,如:

docker port myweb

输出
80/tcp -> 0.0.0.0:32776

一、这时我们在docker主机上可通过如下方式访问容器的服务

1、方式一:

curl  http://localhost:32776

2、方式二:

假设主机的ip地址为192.168.142.138

curl  http://192.168.142.138:32776

这样docker主机局域网内的机器就可以通过主机的地址和绑定的ip来访问到docker容器上的服务了。不过这存在的问题是,需要将容器端口与主机上端口的映射关系变成固定的。否则一旦容器重启,绑定端口就会变了。

3、方式三:

假设容器的ip地址为 172.17.0.2

curl http://172.17.0.2:80

二、其它容器访问该容器的web服务

现在启动另外一个容器,在该容器中要访问myweb容器提供的web服务,可以用如下方式:

1、方式一:直接通过容器的ip地址访问

curl  http://172.17.0.2:80

说明:这么做是可以的,但问题是容器的ip地址是自动分配的,一旦提供该web服务的容器重启后,其ip可能发生变化。这就导致原来指定的ip有问题了。

2、方式二:通过主机地址和映射端口访问

curl http://192.168.142.138:32776

说明:这存在的问题是,端口的映射是自动的,容器一旦重启后会发生变化。

总结下,如果某个容器提供了对外的服务(如web服务),则统一的访问方式可以利用docker主机的ip地址和容器映射到主机上的端口来统一访问。

三、容器之间互联的另外一种方式

docker提供了一种机制,可以让一个容器和另一个容器很方便的连接起来。举例:

docker run --name test1 --link myweb:web -it ubuntu /bin/bash

上面命令创建了一个新的容器test1。 这里引入了一个新的标记 --link,其参数部分的myweb表示要连接的容器,web是要连接的容器的别名。

容器创建后,我们用 ping web命令发现能连接到myweb容器,这样因为用的不是ip地址,而是别名。这样即使myweb1容器重启后,上面创建的test1容器对其连接的代码或脚本也不用修改。

假设myweb容器提供了web服务,容器内的端口是80.

这时在test1容器内可以用如下方式访问:  curl  http://web:80

显然,这种方式的优点是不再指定ip地址,即使 myweb容器重启后ip地址变了也没关系。

注意:需要注意的是,如果myweb容器未启动,但有别的容器启动,test1容器利用别名web可能会关联到别的容器上,这是个问题。

docker学习笔记:容器的网络设置的更多相关文章

  1. docker学习笔记-容器相关命令

    新建并启动容器 docker pull centos (先下载镜像,如果没有直接使用docker run 命令会根据本地情况进行下载) # docker run [可选参数] image # 参数说明 ...

  2. Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7)

    前一节演示在docker中安装mssql,地址:Docker学习笔记之--安装mssql(Sql Server)并使用Navicat连接测试(环境:centos7) 本节演示 .Net Core项目容 ...

  3. Docker学习笔记之--.Net Core应用容器通过网桥连接Redis容器(环境:centos7)

    上节演示通过应用容器连接sql server容器,连接:Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7) 本节演示安装 redis容器,通过网桥连接 先决 ...

  4. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  5. Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(一)

    上一节演示如何安装Docker,链接:Docker学习笔记之-在CentOS中安装Docker 本节演示 将.net core 3.1 部署到docker容器当中,并使用 Nginx反向代理,部署平台 ...

  6. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

  7. docker学习笔记(3)- 镜像

    简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...

  8. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  9. Docker学习(六): 网络使用与配置

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  10. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

随机推荐

  1. RatProxy

    http://book.51cto.com/art/201212/374023.htm http://www.oschina.net/p/ratproxy/similar_projects

  2. SIM卡厂商的识别方法

    ICCID(SIM卡号码)的定义应该是: 1-6位:国际移动运营商识别码(IMSI),898600为中国移动,898601为中国联通 7-20位:移动和联通的定义是不同的.   中国移动:  第7.8 ...

  3. elaserch 查看节点是否是master

    http://192.168.32.81:9200/_cat/nodes 192.168.32.81 192.168.32.81 3 21 0.00 d * node02 192.168.32.80 ...

  4. c++中的成员选择符

    c++中支持仅能指向类成员的指针,对这种类型的指针进行数据的提取操作时,可使用如下两种类型的操作符:成员对象选择操作符.* 和 成员指针选择操作符->* 例一: #include <ios ...

  5. hdoj 2544 最短路(最短路+Dijkstrea算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路分析:该问题给定一个无向图,要求求从起始点到终点的最短路径长度:可以使用dijkstra算法 ...

  6. javascript中处理引号编码&#034;

    1. <c:out value='${jxOrgJsonStr}' escapeXml="false"/> 2.或者使用innerText 直接接受${jxOrgJso ...

  7. Html.raw(转帖)

    Razor 在JS中嵌入后台变量 HTML 中定义全局变量 @{int CurrentUserId =ViewBag.CurrentUserId;} JS中取值方式var CurrentUserId ...

  8. BZOJ 4143 The Lawyer

           这道题看起来很吓人,但事实上看懂后会发现,其根本没有任何技术含量,做这道题其实要考虑的就是每天最早结束的一场的结束时间以及最晚开始的一场的开始时间,如果结束时间早于开始时间,那么OK就这 ...

  9. 纯css画哆啦A梦

    今天有点无聊,照着网上的图写了个哆啦A梦,无技术可言,纯考耐心. <!doctype html> <html lang="en"> <head> ...

  10. C#变量命名规范

    1.1命名 1.  所有命名必须有意义 2.  成员变量声明在类的顶端,并且每个变量一行 3.  局部变量声明在引用之前 1.1.1  常量命名 1.  常量名用全大写:MAX_PARAMETER_C ...