Docker容器无法连接localhost MySQL:如何修改run命令解决?
问题解决方法
容器内的localhost指向容器自身,而非宿主机,这是导致连接失败的核心原因。根据你的MySQL部署位置,有两种解决方案:
情况1:MySQL运行在宿主机上
修改环境变量配置
编辑.env文件,将host值替换为宿主机的可访问地址:host=host.docker.internal # Linux/macOS/Windows Docker Desktop通用 # 若上述地址无效,可替换为宿主机的实际IP(如192.168.1.100) user=test passwd=test database=semantic_textual_similarity调整Docker启动命令
移除无用的-p 3306:3306端口映射(该参数是将容器端口暴露给宿主机,而非让容器访问宿主机端口),添加宿主机映射参数:docker run --env-file=.env --add-host=host.docker.internal:host-gateway semantic_textual_similarity:semantic_textual_similarityMySQL权限配置(必要步骤)
确保MySQL允许外部连接:- 修改MySQL配置文件(如
my.cnf),将bind-address设置为0.0.0.0(允许所有IP访问) - 给test用户授予跨IP访问权限:
GRANT ALL ON semantic_textual_similarity.* TO 'test'@'%' IDENTIFIED BY 'test'; FLUSH PRIVILEGES;
- 修改MySQL配置文件(如
情况2:MySQL以Docker容器运行
创建自定义Docker网络
docker network create mysql-network启动MySQL容器并加入网络
docker run -d \ --name mysql-container \ --network=mysql-network \ -e MYSQL_ROOT_PASSWORD=your_root_pwd \ -e MYSQL_USER=test \ -e MYSQL_PASSWORD=test \ -e MYSQL_DATABASE=semantic_textual_similarity \ mysql:latest修改环境变量配置
编辑.env文件,将host设置为MySQL容器的名称:host=mysql-container user=test passwd=test database=semantic_textual_similarity启动应用容器并加入同一网络
docker run --env-file=.env --network=mysql-network semantic_textual_similarity:semantic_textual_similarity
内容的提问来源于stack exchange,提问作者Alex Nikitin
相关产品推荐
相关产品推荐

