如何从mysql工作台连接到远程主机上的mysql docker容器?

时间:2020-10-19 17:35:07

标签: mysql docker docker-compose containers mysql-workbench

我已经在我拥有的远程计算机上设置了一个运行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来登录用户名rootpassword。我使用的IP地址肯定可以正常工作,因为我可以通过它运行其他服务,而不会出现任何问题:

enter image description here

1 个答案:

答案 0 :(得分:0)

@ LoF10以下是要检查的事项的快速列表:

  1. 您可以在运行MySQL docker的计算机上的docker网络中进行连接吗?一种简单的测试方法是在远程计算机上运行以下命令: docker run --rm -it --network my-net mysql:5.7 mysql -h mysql -uroot -ppassword 如果不是这样,则说明您的MySQL配置,MySQL数据或容器的初始化可能存在问题。这些是@JorgeCampos建议您进行的验证。由于您是直接从MySQL的Docker Hub entry中提取的,因此应正确设置 配置以允许远程连接。如果良好,请继续。仅供参考,如果您在终端上看到mysql>,您将知道您已成功连接。要退出:\q
  2. 您可以在运行MySQL docker的计算机的本地主机上的裸露端口上进行连接吗?一种简单的测试方法是在远程计算机上运行以下命令: 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通过适当的套接字连接进行连接。如果您无法连接,则将容器的端口映射到主机存在问题。如果良好,请继续。
  3. 假设两台计算机都在同一网络上,并且具有MySQL Workbench的计算机也具有docker,您是否可以使用运行MySQL容器的计算机的IP进行连接,例如10.0.0.4?一种简单的测试方法是在远程计算机上运行以下命令: docker run --rm -it mysql:5.7 mysql -h 10.0.0.4 -uroot -ppassword 如果没有,您可能要验证是否可以:
  • ping 10.0.0.4计算机
  • 是否存在任何阻止其正确暴露于网络的防火墙规则。 Windows的默认防火墙通常会发生这种情况...
  • 如果在AWS上,有很多reasons,为什么在正确分配了公共端口的情况下您可能无法访问,例如安全组,路由表,Internet网关等。

一旦您能够从上面的3开始,那么您应该能够使用MySQL Workbench进行连接。

希望这些帮助。任何更详细的建议都将要求您分享有关本地网络设置(操作系统,物理/虚拟,如何确定IP等)的更多信息。