我有一个运行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应用程序可以访问数据库?
答案 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文件中添加新条目来解决。