如何设置docker在同一主机上与非dockerized服务交谈
我试图设置一个docker容器(称为docker-client
),将访问MySQL服务器上的mysql-server:3306
。 mysql-server
是docker-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