【问题标题】:Cannot connect from MySQL Workbench to dockerized MySQL server无法从 MySQL Workbench 连接到 dockerized MySQL 服务器
【发布时间】:2016-09-10 15:05:25
【问题描述】:

我正在尝试从 MySQL Workbench 连接到我的 dockerized mysql 服务器。我使用的是 Windows 10。这是我的 Dockerfile:

FROM ubuntu:latest

# package updates & install mysql
RUN apt-get update && apt-get install -y mysql-server
RUN apt-get -y install supervisor

ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# bind sql script
ADD musicdb.sql /tmp/musicdb.sql

RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf

EXPOSE 3306

RUN /bin/bash -c "/usr/bin/mysqld_safe &" && \
sleep 5 && \
mysql -u root -e "CREATE DATABASE musicdb" && \
mysql -u root musicdb < /tmp/musicdb.sql

CMD ["/usr/bin/supervisord", "-n"]

我正在使用这个库从 Java 创建、运行等容器:

https://github.com/spotify/docker-client

我在 Java 中执行此操作的实际方法是:

    public static void createContainerWithPorts(){
        DockerClient docker;


        try {
            docker = DefaultDockerClient.fromEnv().build();

//PortBindings
            Map<String, List<PortBinding>> portBindings = new HashMap<>();

            List<PortBinding> hostPorts = new ArrayList<>();

            hostPorts.add(PortBinding.of("0.0.0.0", "3306"));
            portBindings.put("3306", hostPorts);

            HostConfig hostConfig = HostConfig.builder().portBindings(portBindings).build();
            ContainerConfig containerConfig = ContainerConfig.builder().hostConfig(hostConfig).image("mysql-container").exposedPorts("3306").build();

//create container
            ContainerCreation contaierCreation = docker.createContainer(containerConfig);
            String id = contaierCreation.id();

//start container
            docker.startContainer(id);

            ContainerInfo containerInfo = docker.inspectContainer(id);
            System.out.println(containerInfo.toString());

            Scanner scanner = new Scanner(System.in);
            scanner.next();
            docker.killContainer(id);
            docker.removeContainer(id);
            docker.close();
        } catch (DockerCertificateException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (DockerException e) {
            e.printStackTrace();
        }
    }

Java 从之前创建的 Docker Image 构建容器。当我查看实际运行的 Docker 容器时,它看起来端口绑定有效。当我使用 docker exec -it SQLContainer bash 访问我的容器时,它工作正常,我可以访问我的 SQL 服务器。

当我尝试连接 MySQL Workbench 时,我收到如下图所示的错误消息: MySQL Workbench Error Message

有人知道我做错了什么吗?

谢谢,

【问题讨论】:

    标签: java mysql docker mysql-workbench


    【解决方案1】:

    我认为您需要为您的 mysql 服务器创建一个新用户并指定可以使用该用户的位置。这是因为我相信只能通过 localhost 获得 root 访问权限。

    因此,要创建一个新用户,您需要在启动服务器的 RUN 命令中添加一些内容:

    RUN /bin/bash -c "/usr/bin/mysqld_safe &" && \
    sleep 5 && \
    mysql -u root -e "CREATE DATABASE musicdb" && \
    mysql -u root musicdb < /tmp/musicdb.sql && \
    mysql -u root -e "CREATE USER 'newUser'@'%' IDENTIFIED BY 'somePassword'" && \
    mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'newUser'@'%' WITH GRANT OPTION"
    

    这样您就可以创建一个名为newUser 的新用户,该用户可以从任何地方访问。

    【讨论】:

      猜你喜欢
      • 2023-02-08
      • 2015-09-13
      • 1970-01-01
      • 2013-04-14
      • 2018-12-12
      • 2019-01-13
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多