我在 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
在上面的示例中,卷安装在容器外部与本地主机文件夹不同的路径上