如何将mysql端口从主机绑定到docker容器而不会发生端口冲突

时间:2020-02-11 05:36:33

标签: mysql windows docker

我有一个运行Flask应用程序的docker容器,该容器连接到mySQL服务器。 mySQL服务器托管在Windows 10计算机上端口3308的主机上。

执行时 docker run -p 5000:5000 -p 3308:3308 -t webui

我收到错误 Ports are not available: listen tcp 0.0.0.0:3308: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 由于主机上的mySQL服务器正在使用该端口

如何将mySQL的端口映射到docker容器,以便Flask应用程序可以访问数据库?

2 个答案:

答案 0 :(得分:0)

有两种方法可以实现此目的。第一种方法是推荐的方法。

首先是在容器内的/ etc / hosts中添加一个条目:

docker run -p 5000:5000 -p 3308:3308 --add-host database:<HOST_IP> -t webui

您需要用主机的网络IP替换HOST_IP。然后,您可以使用名称“数据库”来引用容器内的数据库(也可以自定义该数据库)。

第二个方法是将您的容器绑定到主机的接口:

docker run -p 5000:5000 -p 3308:3308 --bind 127.0.0.1 -t webui

然后,您可以在容器中引用数据库为127.0.0.1的数据库。

答案 1 :(得分:0)

此问题是由主机名引起的。 mySQL数据库端口不需要绑定到容器,因为它不需要接收任何入站调用,而只需要出站到数据库。如here所述,通过在容器的/ etc / hosts文件中添加新条目来解决。