docker 容器之间互联

本贴最后更新于 1948 天前,其中的信息可能已经时移世改

起源:国庆断电之后,公司的环境挂掉了一部分,基本是因为容器之间不能访问导致的,还有就是服务器性能一般,多个容器向一个容器请求配置文件,导致堵塞卡住。还有一小部分原因,在于刚开始起容器的时候没有加自起。

启动一个 doc 容器

docker run -ti -p 4000:4000 docs/docker.github.io:latest

关于 docker 容器的网络驱动,官网介绍有以下几个:

*   bridge:默认网络驱动程序。如果未指定驱动程序,则这是您要创建的网络类型。当您的应用程序在需要通信的独立容器中运行时,通常会使用桥接网络。见 [桥接网络](https://docs.docker.com/network/bridge/)。
    
*   host:对于独立容器,删除容器和Docker主机之间的网络隔离,并直接使用主机的网络。host 仅适用于Docker 17.06及更高版本上的群集服务。请参阅 [使用主机网络](https://docs.docker.com/network/host/)。
    
*   overlay:覆盖网络将多个Docker守护程序连接在一起,并使群集服务能够相互通信。您还可以使用覆盖网络来促进群集服务和独立容器之间的通信,或者在不同Docker守护程序上的两个独立容器之间进行通信。此策略无需在这些容器之间执行OS级别的路由。请参阅[覆盖网络](https://docs.docker.com/network/overlay/)。
    
*   macvlan:Macvlan网络允许您为容器分配MAC地址,使其显示为网络上的物理设备。Docker守护程序通过其MAC地址将流量路由到容器。macvlan 在处理期望直接连接到物理网络的传统应用程序时,使用驱动程序有时是最佳选择,而不是通过Docker主机的网络堆栈进行路由。见 [Macvlan网络](https://docs.docker.com/network/macvlan/)。
    
*   none:对于此容器,禁用所有网络。通常与自定义网络驱动程序一起使用。none不适用于群组服务。请参阅 [禁用容器网络](https://docs.docker.com/network/none/)。
    
*   [网络插件](https://docs.docker.com/engine/extend/plugins_services/):您可以使用Docker安装和使用第三方网络插件。这些插件可从 [Docker Hub](https://hub.docker.com/search?category=network&q=&type=plugin) 或第三方供应商处获得。有关安装和使用给定网络插件的信息,请参阅供应商的文档。
    

如何选择合适的驱动

*   当您需要多个容器在同一个Docker主机上进行通信时,用户定义的桥接网络是最佳选择。
    
*   当网络堆栈不应与Docker主机隔离时,主机网络最佳,但您希望隔离容器的其他方面。
    
*   当您需要在不同Docker主机上运行的容器进行通信时,或者当多个应用程序使用swarm服务协同工作时,覆盖网络是最佳选择。
    
*   当您从VM设置迁移或需要您的容器看起来像网络上的物理主机(每个都具有唯一的MAC地址)时,Macvlan网络是最佳的。
    
*   第三方网络插件允许您将Docker与专用网络堆栈集成。
    

环境需要 容器访问以主机 ip+port 访问其他的容器的服务,这边撇开合不合理说,因为一般都会用 link 链接容器等,这边有这个需求

一般来说我们使用桥接的方式,应该没有这些问题,可能是因为重启之后没有执行一下命令导致的 ,实在没想明白为啥,包转发打开的

1.  配置Linux内核以允许IP转发。
    
    $ sysctl net.ipv4.conf.all.forwarding\=1
    
2.  将策略的iptablesFORWARD策略更改DROP为 ACCEPT。
    
    $ sudo iptables \-P FORWARD ACCEPT
    

     这些设置在重新启动时不会持续存在,因此您可能需要将它们添加到启动脚本中。  

忽然想到一点,应该以下方式也可以

db

docker run  -d -p 3306:3306 —name=db mysql

Web

docker run -d -p 80:80 —link db:db web

总结下,关于网络这边还是需要好好研究下,不然每次遇到容器互联,要么关掉防火墙,要么重启 docker 的方式太原始以及 low,还是应该合理的去操作,既然有些知识没有掌握,还是应该看官方文档,别人写的博客都是别人理解的总结,不一定适用,就算适用了,下次也不一定记得住。

环境的问题应该是,iptables 的 FORWARD 策略没修改导致的

没文化多读书的这个道理,没有骗人啊 哈哈

参考文档:

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    478 引用 • 902 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 其实 我以前使用的是 host 模式。。。

    docker 启动的时候,把 机器名或者 ip 以及 端口一起传到容器里面。

    应用启动后,会到注册中心把 机器名 + 端口注册 注册好。

    调用方式,都从注册中心拿。

    1 回复
  • 其他回帖
  • yuanhenglizhen

    这样的话,网络那一块就没有隔离了,就用了 网络中的其中一个 ip,是不是可以这么理解

  • 是的 没有隔离 共用宿主机的 ip

    比较简单高效

yuanhenglizhen
笔落兴亡定三端之妙,墨写清白尽六艺之奥

推荐标签 标签

  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 109 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖
  • 安装

    你若安好,便是晴天。

    128 引用 • 1184 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 44 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 38 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    228 引用 • 1450 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 5 关注
  • 导航

    各种网址链接、内容导航。

    37 引用 • 168 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 612 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 50 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    478 引用 • 902 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    25 引用 • 217 回帖 • 156 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 180 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    5 引用 • 13 回帖
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    10 引用 • 85 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 425 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 154 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 6 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 410 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖 • 1 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖 • 1 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 560 关注