gpt4 book ai didi

mysql - MySQL 的 Docker 代理 : "Lost connection" message from host machine

转载 作者:行者123 更新时间:2023-11-29 18:19:49 25 4
gpt4 key购买 nike

我想要什么

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

以下是我的更改:https://github.com/fchris82/nginx-proxy/commit/33d80ea4d4be5d511e4dab0413d516770aa15262

如您所见,我已将 stream {} block 添加到 nginx.conf/etc/nginx/stream.conf.d目录。这是为流 block 生成的 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

那么,有人知道为什么可以在容器中工作但为什么不能在主机上工作吗?

“解决方案”

对于我真正想要的东西,没有解决方案。我想要这样的东西:Nginx TCP forwarding based on hostnameTarun's answer错误信息已解决,谢谢。

最佳答案

您需要确保

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

我生成为

server {
listen 81;
proxy_pass whoami.loc;
}

因为要使您的原始配置正常工作,它需要 /etc/hosts 中的 whoami.loc 的主机条目。如果您将主机条目设置为 127.0.0.1 那么它将只监听容器内的 localhost。来自外部的连接将不会得到应答。

这就是在进入主机并重新启动 nginx 后,它在容器内部工作而不是从主机工作的原因。因为它变成了效果监听 127.0.0.1:81

关于mysql - MySQL 的 Docker 代理 : "Lost connection" message from host machine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46688433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com