Docker Compose部署的MariaDB容器无法通过公网IP/主机名访问
解决公网无法连接Docker中MariaDB的问题
1. 修改MariaDB绑定地址,允许远程访问
默认情况下MariaDB会绑定127.0.0.1,仅容器内部可访问,需修改配置让它监听所有网卡:
方法一:挂载自定义配置文件
在本地创建mariadb.conf.d目录,新建50-server.cnf文件,内容如下:
[mysqld] bind-address = 0.0.0.0
修改docker-compose.yml中mariadb的volumes,添加一行挂载配置:
volumes: - ./db/data:/var/lib/mysql - ./schema.sql:/docker-entrypoint-initdb.d/schema.sql - ./mariadb.conf.d:/etc/mysql/mariadb.conf.d # 新增这一行
方法二:通过command参数直接修改
在docker-compose.yml的mariadb服务中添加command参数:
mariadb: image: mariadb:10.11.8 container_name: mariadb restart: always environment: - MYSQL_DATABASE=mydatabase - MYSQL_ROOT_PASSWORD=mypassword command: --bind-address=0.0.0.0 # 新增这一行 # 其余配置保持不变
2. 创建允许远程连接的数据库用户
默认root用户仅允许localhost访问,需创建支持远程连接的用户:
- 进入MariaDB容器:
docker exec -it mariadb mysql -uroot -pmypassword
- 在MySQL命令行执行以下语句:
-- 创建允许任意IP访问的用户(生产环境建议指定具体IP段) CREATE USER 'root'@'%' IDENTIFIED BY 'mypassword'; -- 授予该用户所有数据库权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
3. 开放主机防火墙端口
确保服务器防火墙放行3306端口:
- 若使用ufw防火墙:
ufw allow 3306/tcp ufw reload
- 若使用firewalld防火墙:
firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload
4. 配置云服务器安全组(云主机场景)
登录云服务商控制台,找到对应服务器的安全组,添加入站规则:允许TCP 3306端口的流量从指定IP或任意IP访问。
内容的提问来源于stack exchange,提问作者Sombre Dreamer
相关产品推荐
相关产品推荐

