docker中两个容器间的互访

在前几篇文章中,我们讨论了如何在Ubuntu14.04(64位)中安装docker,以及如何在docker中部署一个apache服务器并在外部电脑中访问该服务器,和在docker中部署

一个mysql数据库并在外部电脑中访问这个数据库。

下面来讨论下docker的容器间的互访,主要以两个容器间的mysql数据库互访为例。

有时候,两个启动的容器之间是需要交流的,比如我们在一个容器中运行了一个apache服务器,上面有一个网站,然后网站的数据库我们就可以部署在另外一个容器中。或者两个容器都部署了数据库,然后这两个数据库之间需要交流。

下面我们以一个容器访问另一个容器的mysql数据库为例。

容器间的访问主要是通过—link参数来进行的。

首先按照前面的教程在一个镜像中安装好xampp。

然后启动这个镜像,并将启动的容器命名为server,作为mysql服务器:

sudo docker run –i –t –P –-name=server ubuntu2 /bin/bash

(注意P是大写)

进入到容器server的命令行后,启动mysql

/opt/lampp/lampp start

在本机电脑中打开另一个命令行终端,运行另外一个容器,作为mysql客户端,并访问容器server中的mysql数据库:

sudo  docker run –i –t –P  --link=server:db –name=client ubuntu2 /bin/bash

(注意P是大写)

--link=server:db表示把刚才的server容器重新命名成db,然后你就可以在上面的client容器中访问到server容器了。

在容器client命令行中,启动mysql:

/opt/lampp/lampp  start

接着访问server容器中的mysql数据库

mysql  -h db –u root

(注意-h后面的值要对应link=server:db中的值)

到这里就,client就连接上了server容器的mysql数据库了。

看有哪些数据库:

show databases;

然后新建一个数据库:

create  database hehe;

然后回到server容器中的命令行,进入msyql:

mysql –u root

查看有哪些数据库:

show databases;

此时应该可以看到hehe。表明client容器中连接上的确实是server中的mysql数据库。

到这里,对容器间的交流就结束了。

常见问题:

1. 出现 lost connection to mysql server的错误:

解决方法:

首先进入到目录(如果你的mysql是通过xampp安装的)/opt/lampp/etc:

cd /opt/lampp/etc

然后用vim 打开my.cnf,找到这一行:

bind-address = 127.0.0.1

将它注释掉,如果没有这行则忽略。

然后找到[mysqld]部分的参数,在配置后面建立一个新行,添加下面这个参数:

skip-name-resolve

保存并退出。

接着重启xampp:

/opt/lampp/lampp restart

到这里应该就解决了。

如果你的Mysql不是通过xampp安装的,则my.cnf一般在一般只会存放在/etc/my.cnf或者/etc/mysql/my.cnf下;

对my.cnf的修改跟上面的一样,然后重启mysql:

/etc/init.d/mysql restart

2. Host ip is not allowed to connet to this mysql server之类的错误

解决方法:

进入mysql:

mysql -u root

然后对其他用户授权:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

到这里应该就解决了。

如果还解决,请参考这里:http://joinyo.iteye.com/blog/1489380

时间: 2024-11-08 13:02:18

docker中两个容器间的互访的相关文章

10: docker 跨主机的容器间通信(macvlan / overlay )

docker 跨主机的容器间通信(macvlan) 作用: 虚拟多个mac地址,虚拟出多个网卡给容器用. #创建macvlan网络 docker network create --driver macvlan(要创建的网络类型) --subnet  子网IP段  --gateway 本机网关 -o parent=本机网卡  创建的macvlan网络名称 [[email protected] ~]# docker network create --driver macvlan --subnet 1

Docker中的Redis容器如何连接上进行操作?

Docker中的Redis容器如何连接上进行操作? 1.登录putty有如下信息: 公用虚拟 IP (VIP)地址42.159.156.115内部 IP 地址10.205.178.22IP address for eth0:    10.205.178.22IP address for docker0: 172.17.42.1 2. 下载 http://download.redis.io/redis-stable/redis.conf修改如下字段 # requirepass foobared去掉

使用docker搭建nfs实现容器间共享文件

首先介绍下今天的两个主角:nfs和docker nfs 是什么 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样. 摘自百度百科 docker 是什么 这个就不多说了,近两年一个非常流行的东西哦. 主角介绍完毕,那么要说说为什么要使用docker来搭建nfs,其实本文标题已经说明,主要

Docker之网络管理(容器间通信的配置)

博文大纲: 一.Bridge模式(同一台Docker服务器上容器间的通信) 二.部署consul服务实现Docker容器跨主机通信 前言: 当你开始大规模使用Docker时,你会发现需要了解很多关于网络的知识.Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.本文首先介绍了Docker自身的4种网络工作方

Docker中创建redis容器

1.创建 docker run --name myredis1 -m="5M" -d redis 2.移除所有容器: docker rm $(docker ps -a -q) 3.使用本机中的redis.conf文件 docker run --name r1 -v /root/redis.conf:/usr/local/bin/redis.conf -d redis redis-server /usr/local/bin/redis.conf

关于在docker中配置elasticsearch容器的方法

一.关于docker的安装,注意几点 1.如果系统是Win10家庭版,是没有Hyper-V的,所以无法安装docker(运行docker安装包会报错),为此docker官网提供的解决方法是安装docker toolbox(一种结合docker,git,virtualBox的管理工具),而docker toolbox安装之后下面的导航栏是没有docker图标的. 2.第二种解决方法就是创建一个Hyper-V骗过扫描,网上很多方法可以去查看. 二.docker安装成功之后打开toolbox(我是安装

ArcEngine中两个窗体间地图的传递

                  第一个窗口 Editfrm frm = new Editfrm();//实例化第二个窗口 frm.Tag = axMapControl1.Map;//在Tag属性中存储,第一个窗口的地图 frm.Show(); 第二个窗口 axMapControl.Map=(IMap).Tag;//获取地图

【K8S学习笔记】Part3:同一Pod中多个容器间使用共享卷进行通信

本文将展示如何使用共享卷(Volume)来实现相同Pod中的两个容器间通信. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了kubectl命令行工具来与集群通信.如果未准备好集群,那么你可以使用Minikube创建一个K8S集群,或者你也可以使用下面K8S环境二者之一: Katacoda Play with Kubernetes 如果需要查看K8S版本信息,可以输入指令kubectl version. 0x01 创建一个

Docker中未指定挂载点容器间volume卷的数据共享

一 背景 在实际使用过程中,我们可能会经常遇到容器间数据共享的情况,怎么处理呢?通过 docker 命令中的一些选项,我们即可完成容器间的数据共享. 二 实验步骤 2.1 创建容器 容器一:gysl-1 [[email protected] ~]# docker run -it --rm --name gysl-1 -v /data-1 alpine 容器二:gysl-2 [[email protected] ~]# docker run -it --rm --volumes-from gysl