部署了两个独立的容器:

Container #1 - Web Client
Container #2 - SQL Server

不同容器间如何互访?

无法从 Container #1 访问到 Container #2,ping 不通。

检查网络状态

安装 Docker 时,会自动创建 3 个网络。

docker network ls 命令可以列出这些网络。

bridge 网络:表示所有 Docker 安装中都存在的 docker0 网络。除非使用 docker run --net=<NETWORK>选项另行指定,否则 Docker 守护进程默认情况下会将容器连接到此网络。在主机上使用 ifconfig命令,可以看到此网桥是主机的网络堆栈的一部分。
none 网络:在一个特定于容器的网络堆栈上添加了一个容器。该容器缺少网络接口。
host 网络:在主机网络堆栈上添加一个容器。您可以发现,容器中的网络配置与主机相同。

docker network inspect 命令用于显示一个或多个网络的详细信息。

它返回有关一个或多个网络的信息。 默认情况下,此命令将所有结果呈现在JSON对象中。

docker network ls

NETWORK ID          NAME              DRIVER
7fca4eb8c647 bridge bridge
9f904ee27bf5 none null
cf03ee007fb4 host host docker network inspect bridge
[
{
"Name": "bridge",
"Id": "b2c85e46cb4fad5603c1614d04e73f6fc07a27b0d4c6a026f03b28a50a6e869b",
"Created": "2019-11-03T09:14:31.8501331Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"0d5338cf858f58e6dcffa489229d1b2f2b35cdc6ce3076bd2eccba305186dce9": {
"Name": "exciting_perlman",
"EndpointID": "48aca2d7558edf69d1e6bfbcb6c47f4f3446d64e278600ffaf8a9b47cf7e60c2",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": ""
},
"Labels": {}
}
]

Issue 原因

Container #1 包含在 bridge 网络中,而 Container #2 并没有被包含进来。

解决方案

重启容器,将 #2 接入 #1 同一网络(bridge)中即可。

docker run --name mssql -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=yourStrong(!)Password" -p : -d mcr.microsoft.com/mssql/server:-CTP3.-ubuntu

docker ps

docker network connect bridge 4f91e220c912

docker network inspect bridge
[
{
......"ConfigOnly": false,
"Containers": {
"0d5338cf858f58e6dcffa489229d1b2f2b35cdc6ce3076bd2eccba305186dce9": {
"Name": "exciting_perlman",
"EndpointID": "48aca2d7558edf69d1e6bfbcb6c47f4f3446d64e278600ffaf8a9b47cf7e60c2",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"4f91e220c9126a443143d7e98f2bc8afdbd82211402c581a6a411c197a77ea25": {
"Name": "mssql",
"EndpointID": "050fc8a64e774480e8728292d14778ba86beea433e37ca28cd03414de000f739",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
......
}
]

在 Docker 的 Ubuntu 镜像中如何使用 ifconfig 和 ping 命令?

进入 Docker 容器

docker exec -it 容器ID或容器名 bash

安装 ifconfig 和 ping 工具包

apt-get update
apt-get install net-tools
apt-get install iputils-ping

Docker 常规操作命令?

启动容器

docker start 容器ID或容器名

参数
-i:以 交互模式启动
-t:以 附加进程方式启动

停止容器

docker stop 容器ID或容器名

参数
-t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态

关闭容器

docker kill 容器ID或容器名

重启容器

docker restart 容器ID或容器名

参数
-t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态

参考资料

https://www.cnblogs.com/lihan829/p/11483594.html
https://forums.docker.com/t/how-to-reach-a-container-from-another-container-without-ip-of-dockernat/21083/4
https://www.ibm.com/developerworks/cn/linux/l-docker-network/index.html
https://www.cnblogs.com/jsonhc/p/7823286.html
https://www.yiibai.com/docker/network_connect.html
https://blog.csdn.net/Michel4Liu/article/details/80889977

[Docker] - 不同容器之间相互访问的实现方式(例如:Client 访问 DB)的更多相关文章

  1. 通过命令验证docker容器相当一个轻量级的Linux运行环境,且每个容器内都有一个属于自己的文件系统,容器之间相互隔离

    一.docker的三个重要概念 1.镜像:打包项目带上环境,即镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的配置参数.镜像 ...

  2. docker笔记--容器之间如何互相免密?

    在使用docker搭建hadoop分布式集群的时候,需要各容器之间相互免密登录,传统的方式我想或许会很麻烦,特别是当容器达到几百上千台的时候,这时就需要有一种方式来更简单实现免密登录了. 环境介绍: ...

  3. docker之容器访问和网络连接(三)

    前言 当一台服务器上部署了多个应用容器,它们直接可能需要相互通信,比如web应用容器需要访问mysql数据库容器. 主机访问容器 通过映射端口的形式我们可以在外部访问容器内的服务 # 将主机的127. ...

  4. MacOS下解决宿主机和docker容器之间网络互通

    docker在Mac下使用非常方便,官网提供了desktop版本的可视化软件,甚至还十分贴心地集成好了k8s套件.然而如果想同时部署和使用多个容器,每个容器不使用127.0.0.1地址,而是各自有ip ...

  5. Tomcat中容器是什么以及容器与容器之间的数量关系。

    Tomcat容器到底是什么 学java有一小段时间了,一直使用Tomcat,也知道Tomcat是一个大的Servlet容器,里面还有许多子容器,容器之间都是相互嵌套的.也看过一下接收Tomcat的文章 ...

  6. 理解容器之间的连通性 - 每天5分钟玩转 Docker 容器技术(34)

    通过前面小节的实践,当前 docker host 的网络拓扑结构如下图所示,今天我们将讨论这几个容器之间的连通性. 两个 busybox 容器都挂在 my_net2 上,应该能够互通,我们验证一下: ...

  7. Docker学习笔记 - Docker容器之间的连接

    学习目标: 容器之间可以相互连接访问:: --link redis:redisAlias 准备工作 FROM ubuntu:14.04 RUN apt-get install -y ping RUN  ...

  8. Docker使用Link与newwork在容器之间建立连接

    一,使用 --link容器互联 docker 默认使允许container 互通的(通过-icc=false 关闭互通)同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地 ...

  9. docker从容器中怎么访问宿主机

    docker从容器中怎么访问宿主机  我来答 浏览 3160 次 2个回答 #热议# 2019年全国两会召开,哪些提案和政策值得关注? 好程序员 知道合伙人 推荐于2017-11-22   dock ...

随机推荐

  1. OpenCV 学习笔记(0)两幅图像标定配准

    参考教程 依赖opencv扩展库,使用sifi匹配 保存配准信息 "./config/calibratedPara.yaml" #include <iostream> ...

  2. 14-网页,网站,微信公众号基础入门(网页版MQTT,小试牛刀)

    https://www.cnblogs.com/yangfengwu/p/11192639.html 抱歉哈...最近由于做板子,,教程的进度落下了... 这些天总共做了还几块板子 首先对当前这个教程 ...

  3. [RN] React Native 删除第三方开源组件依赖包 后 还要做的 (以 删除 react-native-video为例)

    近期测试使用了下  react-native-video 使用一直不成功,后来想着删除掉, 使用命令: npm uninstall react-native-video 重新编译后,还是一直报错 后来 ...

  4. Macbook Pro升级10.15后百度网盘无法登陆,网络连接错误(-1001)

    兴冲冲升级到10.15,结果百度网盘挂了~QQ 由于长期在境外实验室做研究,百度又封锁了境外登陆,所以客户端是唯一跟家里联络的方式,现在它也挂了感觉整个天都塌下来了. 找了一圈,发现一个特别神奇的解锁 ...

  5. Review of Semantic Segmentation with Deep Learning

    In this post, I review the literature on semantic segmentation. Most research on semantic segmentati ...

  6. 避免MySQL出现重复数据处理方法

    对于常规的MySQL数据表中可能存在重复的数据,有些情况是允许重复数据的存在,有些情况是不允许的,这个时候我们就需要查找并删除这些重复数据,以下是具体的处理方法! 方法一:防止表中出现重复数据 当表中 ...

  7. Honk's pool[STL multiset]

    目录 题目地址 题干 代码和解释 题目地址 Honk's pool(The Preliminary Contest for ICPC Asia Shenyang 2019 ) 题干 代码和解释 本题使 ...

  8. Delphi XE7并行编程: 并行For循环

    从Delphi XE7开始,引入了全新的并行编程库用于简化并行编程,它位于System.Threading单元中. 下面是一个判断素数的简单例子:function IsPrime (N: Intege ...

  9. 最全Linux应急响应技巧 【转】

    概述 Linux环境下处理应急响应事件往往会更加的棘手,因为相比于Windows,Linux没有像Autorun.procexp这样的应急响应利器,也没有统一的应急响应处理流程.所以,这篇文章将会对L ...

  10. Redis禁用部分危险命令(keys/flushdb等)

    在redis.conf文件[SECURITY]区域配置: 1.禁用命令: rename-command KEYS "" rename-command FLUSHALL " ...