web-dev-qa-db-ja.com

パブリックIPではアクセスできませんが、ローカルホストではアクセスできます

Dockerコンテナ内のサーバーでInluxDBを実行しています。

同じサーバーから実行した場合、このコマンドは問題ありません。

curl -G http://localhost:8086/query -u my_user --data-urlencode "q=SHOW DATABASES"

認証は問題なく、データベースを出力します。

しかし、ローカルホストをパブリックIPに変更すると、同じサーバーからも、他のサーバーからも機能しません(これが主な目標であり、別のサーバーからも機能するはずです。

curl -G http://ip_of_the_same_server:8086/query -u my_user --data-urlencode "q=SHOW DATABASES"
1
Július Marko

コンテナが任意のipv4(0.0.0.0)からのポートでリッスンしているかどうかを確認できます

docker ps例:0.0.0.0:8086-> 3306/tcp

サーバーはファイアウォールなどを介してネットワークにどのように接続されていますか。ファイアウォールを介して接続されている場合は、最初にポート8086が開いているかどうかを確認し、telnet別のサーバーからのポート

Telnetが機能する場合は、別のサーバーのIPアクセス用にmysqlでユーザーを作成したかどうかを確認する必要があります。また、mysqlにアクセスするには、別のサーバーのIPアドレスでユーザーを作成する必要があります。または、アクセスで「user」@「%」を使用できます。ユーザーの作成中に必要なデータベースにこれにより、任意のIPからそのユーザーが許可されます

* dbnameのすべての特権を 'username' @ 'another-server-ip'に付与します。

または* dbnameのすべての特権を 'username @'% 'に付与します。

'%'は、任意のホストまたはIPから許可されます

使用法に従って助成金を使用します例:選択、挿入、更新など。

MysqlのデータボリュームをHostフォルダーにマップするのに適しています。バックアップの管理とコンテナーの管理が簡単です。

docker run --name mysql-server -p 3307:3307 -v/var/mysql_data/mysql:/ var/lib/mysql -v/opt/done/mysql/myを試すことができます.cnf:/etc/mysql/my.cnf -it mysql sh

上記の例では、ボリュームはコンテナの外部のローカルホストフォルダへの異なるパスにマウントされています

1
Vijay Muddu