如何在Mac上通过Sequel Ace连接Docker容器内的数据库?
问题描述
我有如下docker-compose.yml配置文件,不想使用phpMyAdmin,更倾向于在Mac上使用Sequel Ace连接数据库。尝试使用以下设置连接时无法连接到主机,报错:Unable to connect to host localhost, or the request timed out.。请问我哪里操作有误?
Sequel Ace 当前配置
host: 127.0.0.1 username: root password: password port: 3306
docker-compose.yml 配置内容
services: wordpress: image: wordpress:latest container_name: wordpress volumes: - ./wp-content:/var/www/html/wp-content environment: - WORDPRESS_DB_NAME=wordpress - WORDPRESS_TABLE_PREFIX=wp_ - WORDPRESS_DB_HOST=db - WORDPRESS_DB_USER=root - WORDPRESS_DB_PASSWORD=password depends_on: - db - phpmyadmin restart: always ports: - 8080:80 db: image: mariadb:latest container_name: db volumes: - db_data:/var/lib/mysql # 可选:初始化SQL文件 - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_USER=root - MYSQL_PASSWORD=password - MYSQL_DATABASE=wordpress restart: always phpmyadmin: depends_on: - db image: phpmyadmin/phpmyadmin:latest container_name: phpmyadmin restart: always ports: - 8180:80 environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: password volumes: db_data:
解决办法
问题核心是你的MariaDB容器没有对外暴露端口,本地Sequel Ace无法通过127.0.0.1:3306访问到容器内的数据库服务。
1. 修改docker-compose.yml配置
找到db服务块,添加端口映射配置:
db: image: mariadb:latest container_name: db volumes: - db_data:/var/lib/mysql - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_USER=root - MYSQL_PASSWORD=password - MYSQL_DATABASE=wordpress restart: always ports: - 3306:3306 # 新增:将容器内3306端口映射到本地3306端口
2. 重启Docker容器
执行命令重启服务:
docker-compose down && docker-compose up -d
3. 重新连接Sequel Ace
保持你当前的Sequel Ace配置不变,再次尝试连接即可。
额外提示
- 如果本地已有MySQL服务占用3306端口,可以修改映射端口为
3307:3306,同时将Sequel Ace的端口改为3307。 db服务中的MYSQL_USER=root属于冗余配置,root是MariaDB默认超级用户,无需重复创建,可删除该环境变量。
内容的提问来源于stack exchange,提问作者Chris Farrugia
相关产品推荐
相关产品推荐

