You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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访问,需创建支持远程连接的用户:

  1. 进入MariaDB容器:
docker exec -it mariadb mysql -uroot -pmypassword
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:48:13