我已经在我拥有的远程计算机上设置了一个运行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
但是当我尝试通过工作台进行连接时,会出现“无法连接”的情况。我已经尝试使用密码user
来登录用户名root
和password
。我使用的IP地址肯定可以正常工作,因为我可以通过它运行其他服务,而不会出现任何问题:
答案 0 :(得分:0)
@ LoF10以下是要检查的事项的快速列表:
docker run --rm -it --network my-net mysql:5.7 mysql -h mysql -uroot -ppassword
如果不是这样,则说明您的MySQL配置,MySQL数据或容器的初始化可能存在问题。这些是@JorgeCampos建议您进行的验证。由于您是直接从MySQL的Docker Hub entry中提取的,因此应正确设置 配置以允许远程连接。如果良好,请继续。仅供参考,如果您在终端上看到mysql>
,您将知道您已成功连接。要退出:\q
。docker run --rm -it --network host mysql:5.7 mysql -h 127.0.0.1 -uroot -ppassword
确保使用上面使用的IP,不使用localhost
。这是b / c,MySQL客户端通过在本地查找mysqld
来对'localhost'关键字进行特殊处理。使用127.0.0.1
强制MySQL通过适当的套接字连接进行连接。如果您无法连接,则将容器的端口映射到主机存在问题。如果良好,请继续。10.0.0.4
?一种简单的测试方法是在远程计算机上运行以下命令:
docker run --rm -it mysql:5.7 mysql -h 10.0.0.4 -uroot -ppassword
如果没有,您可能要验证是否可以:10.0.0.4
计算机一旦您能够从上面的3
开始,那么您应该能够使用MySQL Workbench进行连接。
希望这些帮助。任何更详细的建议都将要求您分享有关本地网络设置(操作系统,物理/虚拟,如何确定IP等)的更多信息。