2017-10-11 9 views
0

私が欲しいもの

から「失われた接続」のメッセージがhttps://github.com/jwilder/nginx-proxyパッケージがあります。これは "HTTP"には非常に便利ですが、私はそれをTCPにも使いたいと思います。あなたが見ることができるように、私はnginx.confstream {}ブロックを追加したhttps://github.com/fchris82/nginx-proxy/commit/33d80ea4d4be5d511e4dab0413d516770aa15262ドッカープロキシ:ホストマシン

/etc/nginx/stream.conf.dディレクトリ:(MySQLの)ここで

は私の変化です。ここでは、ストリームブロックの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

あなたは 'server' 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

あなたは仕事にあなたのオリジナルの設定のために、それはwhoami.locため/etc/hostsでホストエントリを必要とするため、私は

server { 
    listen 81; 
    proxy_pass whoami.loc; 
} 

として生成されたばかり

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

ことを確認する必要があります。ホストのエントリを127.0.0.1とすると、コンテナ内のlocalhostだけがリッスンします。外部からの連絡には答えられません。

これは、ホストエントリを作成してnginxを再起動した後の理由です。これは、コンテナ内部からは動作しましたが、ホストからは動作しませんでした。それは効果があるようになったので127.0.0.1:81

関連する問題