如何将mysql工作台连接到docker中运行mysql?

时间:2015-11-20 12:59:17

标签: mysql docker mysql-workbench

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

12 个答案:

答案 0 :(得分:17)

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

  1. 在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
    
  2. 重启docker容器并运行以下命令以访问mysql容器中的bash shell

    docker ps
    docker exec -it <mysql container name> /bin/bash 
    

    在容器内部,连接到mysql命令行类型,

    mysql -u root -p
    

    使用docker-compose.yml中指定的 MYSQL_ROOT_PASSWORD 。执行以下命令以创建新用户。

    create user 'user'@'%' identified by 'pass';
    grant all privileges on *.* to 'user'@'%' with grant option;
    flush privileges;
    

    百分号(%)表示所有ip。重启docker容器。

  3. 在MySQL Workbench中提供连接详细信息。使用docker-compose.yml文件中指定的 MYSQL_PASSWORD

    enter image description here

  4. 您现在应该可以连接到您的mysql容器了。

答案 1 :(得分:14)

2个与泊坞有关的条件:

  • 首先,您的docker run必须将mysql端口映射到主机端口:

    docker run -p host:container
    

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

  • 第二,如果您在VM(docker-machine,使用boot2docker)中使用docker,则需要使用docker-machine ip <VMname>的ip和主机映射端口。

    http://$(docker-machine ip <VMname>):hostPort
    

如果您需要使用localhost,则需要执行some port forwarding at the VirtualBox level

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306"
VBoxManage controlvm "boot2docker-vm" natpf1 "udp-port3306,udp,,3306,,$3306"

controlvm如果VM正在运行,则modifyvm是VM已停止) (将“boot2docker-vm”替换为您的虚拟机的名称:请参阅docker-machine ls

2个与mysql相关的条件:

  • nkratzke/EasyMySQL/Dockerfile所示,您需要启用远程访问:

    # 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镜像中启动数据库时创建用户 例如,参见nkratzke/EasyMySQL/start-database.sh调用的Dockerfile CMD

    /usr/sbin/mysqld &
    sleep 5
    echo "Creating user"
    echo "CREATE USER '$user' IDENTIFIED BY '$password'" | mysql --default-character-set=utf8
    echo "REVOKE ALL PRIVILEGES ON *.* FROM '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "GRANT SELECT ON *.* TO '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "finished"
    

答案 2 :(得分:10)

默认情况下,部署后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从任何主机连接(例如,出于开发目的),请执行以下操作:

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

    docker run -p 3306:3306 --name=mysql57 -d mysql/mysql-server:5.7

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

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

    docker logs mysql57 2>&1 | grep GENERATED

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

    docker exec -it mysql57 mysql -uroot -p

  3. 如果这是全新安装,系统将要求您使用ALTER USER命令更改密码。做吧。

  4. 运行SQL:

    update mysql.user set host = '%' where user='root';

  5. 退出mysql客户端。

  6. 重新启动容器:

    docker restart mysql57

现在您将能够从MySQL Workbench连接到

host: `0.0.0.0` 
port: `3306`

所有更改之后,查询将显示:

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

答案 3 :(得分:3)

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

database: image: mysql:5.6 volumes: - dbdata:/var/lib/mysql environment: - "MYSQL_DATABASE=homestead" - "MYSQL_USER=homestead" - "MYSQL_PASSWORD=secret" - "MYSQL_ROOT_PASSWORD=secret" ports: - "33061:3306"

对于localhost,只需使用主机127.0.0.1和33061端口 enter image description here

答案 4 :(得分:2)

@ Krishna的答案有效,但稍有改动 - 用户添加如下

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

请参阅Authentication plugin 'caching_sha2_password' cannot be loaded

答案 5 :(得分:2)

我正尝试从Mysql Workbench连接,但不允许我连接。原来,我忘了提到port。这是要运行的完整命令,然后从工作台连接:

步骤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

上述命令的说明:

Mysql v8.0.20

mysql:8.0.20

作为独立容器运行(ctrl + c不会停止容器)

-d

容器名称

--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 Workbench连接:

host: localhost
port: 3306
user: admin
password: root

答案 6 :(得分:1)

我通过在 主机名:127.0.0.1 (Localhost)中设置字段值来获得此解决方案,默认情况下为3306,包含您的信用

答案 7 :(得分:0)

  1. 指定您的配置docker-compose.yml。更多详细信息here。示例:

    version: '3.1'
    
    services:
      mysql:
        image: mysql:5.6
        container_name: test-mysql
        ports:
          - 3306:3306
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: password
    
  2. 运行此命令docker-compose up,另一个终端运行docker ps来查看您的容器。
  3. 访问您的泊坞窗:docker exec -it test-mysql bash
  4. 在容器内部,要连接到mysql命令行类型,请运行mysql -u root -p
  5. Create a new user
  6. 最后配置您的MySQL Workbench

enter image description here

答案 8 :(得分:0)

我遵循了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工作台,确保清除参数中的密码。现在输入密码(在我的情况下为example

答案 9 :(得分:0)

您需要在“设置->网络->端口转发”中将主机/来宾IP配置为0.0.0.0,将主机/来宾端口配置为3306

答案 10 :(得分:0)

我解决了该问题,它下载了MySQL Workbench的最新版本,然后使用端口为0.0.0.0的主机3306

答案 11 :(得分:0)

我找到了一段视频,该视频展示了另一种使它起作用的方法。您可以在传入端口号时指定IP地址。也就是说,类似-p 127.0.0.1:3307:3306之类的东西,而不仅仅是-p 3307:3306我从未见过 https://www.youtube.com/watch?v=20om-9Gwuc0#t=7m

示例启动命令

docker run -d -e MYSQL_ROOT_PASSWORD=test --name mysql8 -p 127.0.0.1:3307:3306 mysql:8

然后,我能够使用MYSQL Workbench在端口127.0.0.1上连接到3307enter image description here