【问题标题】:Connecting to Docker container from host从主机连接到 Docker 容器
【发布时间】:2016-03-10 19:40:29
【问题描述】:

我刚刚拉出并运行官方Docker MySQL image 并让它在我的机器上本地运行:

docker run --name mydb -e MYSQL_ROOT_PASSWORD=12345 -d mysql:5.7.11

该屏幕上的说明告诉您如何从另一个容器(配置为命令行客户端)内部连接到 MySQL 服务器(容器)。但我有一个通用的 JDBC 胖客户端 (SQuirreL),我想知道如何连接到我的 docker 容器。

对于 JDBC 连接字符串,我需要同时提供 hostnamedbname,我可以使用什么?我想 Docker 容器可以从我的主机操作系统以某种方式寻址,但我实际上还没有创建任何数据库,所以我不确定我可以提供什么 dbname 值:

jdbc:mysql://<hostname>:3306/<dbname>

【问题讨论】:

    标签: mysql jdbc docker


    【解决方案1】:

    您可以使用转发 3306 运行您的实例:

    $ docker run --expose=3306 -p 3306 mysql
    

    incoming ports

    你指定的:

    jdbc:mysql://127.0.0.1:3306/<dbname>
    

    你的命令变成:

    $ docker run --name mydb -e MYSQL_ROOT_PASSWORD=12345 -d --expose=3306 -p 3306 mysql:5.7.11
    

    您可能需要更改 MySQL 配置。

    可以通过以下方式进入容器:

    $ docker exec -it mydb bash
    

    然后你可以:

    $ echo "bind-address = 0.0.0.0" >> /etc/mysql/my.cnf
    

    别忘了重新加载mysql。

    然后您必须创建数据库并导入您的架构(如果需要)。

    $ mysql -uroot -p12345 -e"CREATE DATABASE mydb"
    $ mysql -uroot -p12345 mydb < mydb-schema.sql
    

    【讨论】:

    • 感谢@joksnet (+1) - 请查看我更新的问题,其中包含我运行的确切 Docker 命令。当我尝试合并您的 --expose-p 参数时,我会遇到各种错误。 如何使用您的(合并的)expose/p args 运行我的命令?再次感谢!
    • 再次感谢!!!一个快速的后续问题,如果您不介意:当您说“不要忘记重新加载 mysql”时,您的意思是停止/重新启动容器吗?再次感谢!
    • 只需在容器内尝试service mysql reload。 ;)
    猜你喜欢
    • 2016-01-25
    • 2018-01-09
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2016-01-05
    • 2018-11-28
    相关资源
    最近更新 更多