【发布时间】:2021-02-02 12:49:38
【问题描述】:
我已经在我拥有的远程计算机上设置了一个运行 mysql 实例的 docker 容器。在过去,这不是问题,但由于某种原因,我现在无法让它工作。我不确定问题可能是什么。我正在使用 docker compose,即使容器正在运行,我似乎也无法通过另一台计算机上的 mysql 工作台进行连接。这是我的详细信息:
docker-compose.yaml
version: '3.7'
services:
api:
image: api
restart: unless-stopped
container_name: api
build: ./node/
ports:
- 3008:3008
mysql:
image: mysql
restart: unless-stopped
container_name: mysql
environment:
MYSQL_DATABASE: pitapaldb
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
build: ./database/
ports:
- 3306:3306
networks:
default:
external:
name: my-net
数据库/Dockerfile
FROM mysql
COPY init.sql /docker-entrypoint-initdb.d
数据库/init.sql
CREATE DATABASE mydb;
USE mydb;
SET SQL_SAFE_UPDATES = 0;
ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password';
flush privileges;
CREATE TABLE carts (
id int PRIMARY KEY AUTO_INCREMENT,
lat float,
lon float,
address varchar(255),
status boolean,
city_id int
);
容器肯定在运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
784cf75183f4 mysql "docker-entrypoint.s…" 2 minutes ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
但是当我尝试通过工作台连接时,我得到“无法连接”。我用密码password 尝试了用户名user 和root。我使用的 IP 地址肯定可以工作,因为我可以通过它运行其他服务,没有问题:
【问题讨论】:
-
所以我建议您首先检查一下您的 MySQL 是否配置为允许外部连接。那将是您的 MySQL 配置文件中的 bind_address 参数,它应该设置为
*或0.0.0.0。检查后,验证您创建的用户是否设置为从任何位置访问您的数据库,因此对于您的根用户,它应该是'root'@'%',请参阅此处的文档Connection access -
是否可以在 docker-compose 或 init.sql 文件中设置这些选项?
-
是的,在 docker compose 的环境部分,您可以添加变量:
MYSQL_ROOT_HOST: '%',您可以添加一个名为命令的新部分,如下所示:command: ["mysqld", "--bind_addresss=0.0.0.0"]不确定绑定地址是否会工作,但值得一试。
标签: mysql docker docker-compose containers mysql-workbench