我在我的localhost上运行mysql我可以通过运行来连接它:
mysql -h 127.0.0.1 -P 3306 -u root -p
Run Code Online (Sandbox Code Playgroud)
我还用命令运行了docker container:
docker run -tid -v $(pwd):/code -p 3306:3306 -p 5000:5000 --name container container
Run Code Online (Sandbox Code Playgroud)
我想从docker容器访问我的Mysql数据库.所以我也从docker容器中输入:
mysql -h 127.0.0.1 -P 3306 -u root -p
Run Code Online (Sandbox Code Playgroud)
但它给了我错误:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?端口似乎是正确的.
编辑1ifconfig泊坞窗
输出:
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1780 errors:0 dropped:0 overruns:0 frame:0
TX packets:977 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2225781 (2.2 MB) TX bytes:56572 (56.5 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:28 errors:0 dropped:0 overruns:0 frame:0
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:1400 (1.4 KB) TX bytes:1400 (1.4 KB)
Run Code Online (Sandbox Code Playgroud)
即使您将 MySQL 配置为侦听所有接口,然后从您的容器从非环回 IP 访问 MySQL,您可能会发现 Docker 的路由、NAT 和防火墙规则不允许您访问主机上运行的服务。对此的快速解决方法是在主机网络堆栈上运行您的容器:
docker run -tid -v $(pwd):/code -p 3306:3306 -p 5000:5000 \
--name container --net host container
Run Code Online (Sandbox Code Playgroud)
您还可以将 MySQL 移动到运行在同一 Docker 网络上的容器内,然后使用 Docker 的 DNS 服务发现通过容器名称访问它。
| 归档时间: |
|
| 查看次数: |
21624 次 |
| 最近记录: |