如何设置docker在同一主机上与非dockerized服务交谈

我试图设置一个docker容器(称为docker-client ),将访问MySQL服务器上的mysql-server:3306mysql-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 

有什么办法让客户端停留docker,服务器停留在非docker,并且MySQL服务器继续在标准端口3306上运行?

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

1)使用docker ips的dns。 只需运行–dns选项。

2)你可以使用名称和别名:首先运行名称的容器
docker run -i -t --name test1 test_docker /bin/bash比运行下一个容器与 – 链接选项
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` 

尝试在启动大使容器时使用环境variablesMYSQL_PORT_3306_TCP主机的IP,而不是主机名mysql-server

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

 docker-client# mysql -h 192.168.100.42