无法通过公网 IP 访问,但可以通过 localhost 访问

无法通过公网 IP 访问,但可以通过 localhost 访问

我在 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

您可以检查您的容器是否正在监听任何 ipv4(0.0.0.0) 的端口

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

您的服务器如何通过防火墙等连接到网络,如果通过防火墙连接,则首先检查端口 8086是开放的,你可以远程登录在另一台服务器的端口上

如果 telnet 可以工作,那么你需要确认你是否已经在 mysql 中创建了用户以供另一个服务器 ip 访问,你需要使用另一个服务器的 ip 地址创建用户才能访问 mysql,或者你可以在创建用户时使用 'user'@'%' 来访问所需的数据库,这将允许该用户从任何 ip

*授予 'username'@'another-server-ip' 上 dbname 的所有权限;

或 *GRANT ALL PRIVILEGES ON dbname TO 'username@'%';

‘%’ 将允许来自任何主机或 IP

根据您的用途使用授权,例如:选择、插入、更新等。

将 mysql 的数据卷映射到主机文件夹是很好的,它易于管理备份和管理容器

你可以试试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

在上面的示例中,卷安装在容器外部与本地主机文件夹不同的路径上

相关内容