MySQL的Docker代理:来自主机的“丢失连接”消息

我想要的是

有https://github.com/jwilder/nginx-proxy包。 这对于“HTTP”非常有用,但我也想用它来TCP。 (MySQL的)

这里是我的变化: https : //github.com/fchris82/nginx-proxy/commit/33d80ea4d4be5d511e4dab0413d516770aa15262

正如你所看到的,我已经添加了stream {}块到nginx.conf/etc/nginx/stream.conf.d目录。 这里是stream块的生成的default.conf

 access_log off; error_log /var/log/nginx/debug.log debug; resolver 127.0.0.11; # whoami.loc upstream whoami.loc { ## Can be connect with "nginxproxy_default" network # nginxproxy_mysql_1 server 192.168.32.2:3306; } server { listen whoami.loc:81; proxy_pass whoami.loc; } 

我做了什么,你怎么能重现错误

 # Set host > sudo echo "127.0.0.1 whoami.loc" >> /etc/hosts # Start containers > docker-compose up -d # "Login" the proxy container > docker-compose exec nginx-proxy /bin/bash # Test connect to MySQL from proxy container root> mysql -u root -proot -h whoami.loc -P 81 # --> OK, it works! Let's exit. mariadb> \q # Exit from container root> exit # Check host > ping whoami.loc # --> OK, 127.0.0.1 # Check docker ports > docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------------------------- nginxproxy_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp nginxproxy_nginx-proxy_1 /app/docker-entrypoint.sh ... Up 0.0.0.0:180->80/tcp, 0.0.0.0:81->81/tcp nginxproxy_whoami_1 /app/http Up 8000/tcp # --> OK # Try to direct connection from host (You can read the IP from the /etc/nginx/stream.conf.d/default.conf file) > mysql -u root -proot -h 192.168.32.2 # --> OK, exit mysql> \q # Try to connect from host with "domain" through docker proxy > mysql -u root -proot -H whoami.loc -P 81 --protocol=tcp # ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2 

那么,有没有人知道为什么从容器工作,但为什么不从主机工作?

解决scheme”

没有解决我真正想要的。 我想这样的东西: 基于主机名的Nginx TCP转发 。 塔伦的答案解决了错误信息,谢谢。

你需要确保

 server { listen whoami.loc:81; proxy_pass whoami.loc; } 

我得到生成

 server { listen 81; proxy_pass whoami.loc; } 

因为whoami.loc原始configuration正常工作,所以需要在/etc/hostswhoami.loc提供主机条目。 如果你把主机条目设置为127.0.0.1那么它只能监听容器内的本地主机。 而来自外部的联系将不会得到回答。

这是在进入主机并重新启动nginx之后的原因,它是从容器内而不是从主机开始的。 因为它变成一个效果听127.0.0.1:81