Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将mysql workbench连接到docker内部运行的mysql?_Mysql_Docker_Mysql Workbench - Fatal编程技术网

如何将mysql workbench连接到docker内部运行的mysql?

如何将mysql workbench连接到docker内部运行的mysql?,mysql,docker,mysql-workbench,Mysql,Docker,Mysql Workbench,我在docker容器中使用mysql服务器,可以访问docker内部。如何在本地(主机)上运行的mysql工作台中创建连接 2码头工人相关条件: 首先,docker运行必须将mysql端口映射到主机端口: docker run -p host:container (例如:docker run-d-p3306:3306tutum/mysql) 其次,如果您在VM中使用docker(docker机器,带boot2docker),则需要使用带有主机映射端口的docker机器ip的ip htt

我在docker容器中使用mysql服务器,可以访问docker内部。如何在本地(主机)上运行的mysql工作台中创建连接

2码头工人相关条件:

  • 首先,docker运行必须将mysql端口映射到主机端口:

    docker run -p host:container
    
(例如:
docker run-d-p3306:3306tutum/mysql

  • 其次,如果您在VM中使用docker(docker机器,带boot2docker),则需要使用带有主机映射端口的
    docker机器ip的ip

    http://$(docker-machine ip <VMname>):hostPort
    
    controlvm
    如果虚拟机正在运行,
    modifyvm
    表示虚拟机已停止) (将“
    boot2docker-vm
    ”替换为您的虚拟机名称:请参阅
    docker-machine-ls


    2.相关条件:

    • 如中所示,您需要启用远程访问:

      # Enable remote access (default is localhost only, we change this
      # otherwise our database would not be reachable from outside the container)
      RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
      
    • 在docker映像中启动数据库时,需要创建用户。
      例如,请参见,它由调用:


    我通过在主机名127.0.0.1(Localhost)中设置字段值得到了解决方案,默认情况下使用您的creds端口3306。

    您只需在docker容器中进行一些配置。请按照以下步骤操作

  • 在docker-compose.yml中指定mysql配置块。我在docker-compose.yml文件中的services对象下有以下mysql块

    services:
        db:
            image: mysql
            volumes:
                - "./.data/db:/var/lib/mysql"
            environment:
                MYSQL_ROOT_PASSWORD: root
                MYSQL_DATABASE: mydb
                MYSQL_USER: user
                MYSQL_PASSWORD: pass
            ports:
                42333:3306
    
  • 重新启动docker容器并运行以下命令以访问mysql容器中的bash shell

    docker ps
    docker exec -it <mysql container name> /bin/bash 
    
    -d
    
    使用docker-compose.yml中指定的MYSQL\u ROOT\u密码。执行以下命令以创建新用户

    create user 'user'@'%' identified by 'pass';
    grant all privileges on *.* to 'user'@'%' with grant option;
    flush privileges;
    
    百分号(%)表示所有ip。重新启动docker容器

  • 在MySQL工作台中,提供连接详细信息。使用docker-compose.yml文件中指定的MYSQL\u密码


  • 您现在应该能够连接到mysql容器

    @Krishna的答案有效,但有一个小小的改变-用户添加如下

    create user 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
    

  • 指定您的配置
    docker compose.yml
    。更多细节。例如:

    version: '3.1'
    
    services:
      mysql:
        image: mysql:5.6
        container_name: test-mysql
        ports:
          - 3306:3306
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: password
    
  • 运行此命令
    docker compose up
    和另一个终端运行
    docker ps
    以查看您的容器
  • 访问您的docker:
    docker exec-it test mysql bash
  • 在容器内部,要连接到mysql命令行类型,请运行
    mysql-u root-p
  • 最后配置MySQL工作台

  • 假设您有
    docker compose
    文件的下一个内容:

    数据库:
    图片:mysql:5.6
    卷数:
    -dbdata:/var/lib/mysql
    环境:
    -“MYSQL\u数据库=宅地”
    -“MYSQL\u USER=homestad”
    -“MYSQL\u PASSWORD=secret”
    -“MYSQL\u ROOT\u PASSWORD=secret”
    端口:
    -“33061:3306”

    对于本地主机,只需使用主机127.0.0.1和33061端口

    默认情况下,部署后MySQL有以下连接限制:

    mysql> select host, user from mysql.user;
    +-----------+---------------+
    | host      | user          |
    +-----------+---------------+
    | localhost | healthchecker |
    | localhost | mysql.session |
    | localhost | mysql.sys     |
    | localhost | root          |
    +-----------+---------------+
    4 rows in set (0.00 sec)
    
    显然,出于安全目的,您将无法在docker映像之外连接到它。 如果需要更改以允许root用户从任何主机连接(例如,出于开发目的),请执行以下操作:

  • 使用所需的所有端口映射启动mysql映像:

    docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
    
    docker-run-p3306:3306--name=mysql57-dmysql/mysql服务器:5.7

  • 或者,如果需要完整的端口映射:

    docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
    
  • 如果这是新安装-获取默认密码:

    docker记录mysql57 2>&1生成的grep

  • 使用
    mysql
    客户端直接连接到docker中的mysqld:

    docker exec-it mysql57 mysql-uroot-p

  • 如果这是新安装,将要求您使用
    ALTER USER
    命令更改密码。去做吧

  • 运行SQL:

    update mysql.user set host='%'其中user='root'

  • 退出
    mysql
    客户端

  • 重新启动容器:

    docker重启mysql57

  • 现在您将能够从MySQL工作台连接到

    host: `0.0.0.0` 
    port: `3306`
    
    所有更改后,查询将显示:

    select host, user from mysql.user;
    +-----------+---------------+
    | host      | user          |
    +-----------+---------------+
    | %         | root          |
    | localhost | healthchecker |
    | localhost | mysql.session |
    | localhost | mysql.sys     |
    +-----------+---------------+
    

    我按照mysql docker hub中的说明进行操作。 写了这个docker-compose.yml

    version: '3.1'
    
    services:
      db:
        image: mysql
        command: --default-authentication-plugin=mysql_native_password
        environment:
          MYSQL_ROOT_PASSWORD: example
        ports:
          - 3306:3306
    

    在连接mysql workbench时,请确保清除参数中的密码。现在输入密码(在我的例子中是
    示例

    您需要进入
    设置->网络->端口转发
    并配置:

    Host/Guest IP
    0.0.0


    主机/来宾端口
    3306
    我试图从
    Mysql工作台
    连接,但它不允许我连接。结果,我忘了提到
    端口
    。以下是要运行并从工作台连接的完整命令:

    步骤1-运行docker容器:

    docker run --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -e MYSQL_USER=admin -e MYSQL_PASSWORD=root -d mysql:8.0.20
    
    host: localhost
    port: 3306
    user: admin
    password: root
    
    上述命令说明:

    docker run --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -e MYSQL_USER=admin -e MYSQL_PASSWORD=root -d mysql:8.0.20
    
    host: localhost
    port: 3306
    user: admin
    password: root
    
    Mysql v8.0.20

    mysql:8.0.20
    
    作为分离的容器运行(ctrl+c不会停止容器)

    容器名称

    --name mysql8
    
    端口暴露

    -p 3306:3306
    
    设置环境变量

    -e MYSQL_ROOT_PASSWORD=root
    -e MYSQL_DATABASE=testdb
    -e MYSQL_USER=admin
    -e MYSQL_PASSWORD=root 
    
    您可以通过以下方式查看容器的实时日志:

    docker logs mysql8 -f
    
    步骤2-从Mysql工作台连接:

    docker run --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -e MYSQL_USER=admin -e MYSQL_PASSWORD=root -d mysql:8.0.20
    
    host: localhost
    port: 3306
    user: admin
    password: root
    

    我在下载MySQL Workbench的最新版本时解决了这个问题,然后我使用主机
    0.0.0
    和端口
    3306

    ,我找到了一个视频,它展示了另一种实现此功能的方法。您可以在传入端口号时指定IP地址。也就是说,类似于
    -p 127.0.0.1:3307:3306
    而不是
    -p 3307:3306
    我以前从未见过这种情况

    示例启动命令

    docker run -d -e MYSQL_ROOT_PASSWORD=test --name mysql8 -p 127.0.0.1:3307:3306 mysql:8
    
    然后我可以使用MYSQL Workbench在端口
    3307
    连接到
    127.0.0.1

    Docker正在我的本地计算机上运行。它有172.17.42.1 IP地址