如何设置docker与同一主机上的非dockerized服务进行通信

时间:2014-08-20 20:34:53

标签: docker

我正在尝试设置一个docker容器(称为docker-client),它将访问mysql-server:3306上的MySQL服务器。 mysql-serverdocker-client所在的主机相同。

我以为我可以使用链接和大使模式来做到这一点,所以我尝试了这个:

mysql-server$ docker run -d --name mysql_ambassador -e MYSQL_PORT_3306_TCP=tcp://mysql-server:3306 svendowideit/ambassador

然后我像这样启动了我的客户端:

docker run --link mysql_ambassador:mysql-server -i -t ubuntu /bin/bash

不幸的是,尝试在客户端上运行mysql会出错:

docker-client# mysql -h mysql-server
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

客户端是否有任何方法可以保持停靠,服务器保持非停靠状态,MySQL服务器继续在标准端口3306上运行?

2 个答案:

答案 0 :(得分:1)

如果您需要使用主机名,有几个选项:

1)使用带有docker ips的dns。只需使用--dns选项运行。

2)您可以使用名称和别名:  首先运行名为
的容器     docker run -i -t --name test1 test_docker /bin/bash  而不是使用--link选项
运行下一个容器     run -i -t --link=test1:test_hostname test_docker /bin/bash
之后,该名称将与正确的IP相关联:

`root@1b6a491653e2:/# cat /etc/hosts
172.17.45.232   1b6a491653e2
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.45.230   test_hostname`

答案 1 :(得分:0)

在启动大使容器而不是主机名MYSQL_PORT_3306_TCP时,请尝试在环境变量mysql-server中使用主机的IP。

但是,如果您只想连接到运行docker容器的同一主机上的服务,则可以使用主机的IP(不需要大使)来完成此操作,例如

docker-client# mysql -h 192.168.100.42