我正在尝试设置一个docker容器(称为docker-client
),它将访问mysql-server:3306
上的MySQL服务器。 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
客户端是否有任何方法可以保持停靠,服务器保持非停靠状态,MySQL服务器继续在标准端口3306上运行?
答案 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