2017-10-11 55 views
0

我想要什么

“失去联系”的消息还有就是https://github.com/jwilder/nginx-proxy包。这对于“HTTP”非常有用,但我也想将它用于TCP。 (MySQL的)为MySQL码头工人代理:从主机

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

正如你所看到的,我已经加入stream {}nginx.conf/etc/nginx/stream.conf.d目录。这里是产生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解决了错误信息,谢谢。

+0

你正在做一个'服务器'proxy_pass并期待它做'stream' proxy_pass? –

+0

@TarunLalwani我不明白你的意思。包含的conf位于'stream {}'块中。这里还有'server'-s:https://www.nginx.com/resources/admin-guide/tcp-load-balancing/。 –

+0

Okie我的坏,我没有正确读取配置,没有看到它只是流块的一部分。你可以试试'telnet whoami.loc 81'并看看你得到了什么? –

回答

0

你需要确保

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

我作为

server { 
    listen 81; 
    proxy_pass whoami.loc; 
} 

如何产生因为你原来的配置工作,它需要whoami.loc/etc/hosts主机条目。如果您将主机条目设置为127.0.0.1,那么它只会侦听容器内的本地主机。外界的联系不会得到回答。

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