我怎样才能访问我的docker maria db?

时间:2015-10-16 12:25:24

标签: mysql docker mariadb

我的主要问题是,在使用命令<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="elementContainers"> <span class="labelText mandatory" >First Name</span> <span class="spacing"></span> <input type="text" class="customInput" id="firstName" name="firstName" value="" pattern="[A-Za-z]{2,}" required/> <span class="labelText" >Last Name</span> <span class="spacing"></span> <input type="text" class="customInput" id="lastName" value="" name="lastName" pattern="[A-Za-z]{1,}" required/> </div> <div class="elementContainers"> <span class="labelText mandatory" >Gender</span> <span class="spacing"></span> <input type="radio" name="gender" >Male <input type="radio" name="gender" >Female </div>为我的mariadb创建了一个docker容器后,我该如何访问sql db?

在某个地方,我已经看到了一个解决方案,使用了一个临时(在删除容器后删除)容器,但是找不到它了。

我正在搜索像docker run --name db -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 mariadb这样的命令。

5 个答案:

答案 0 :(得分:6)

只是mysql-client,没有额外的docker容器

在主机上安装mysql客户端,

apt-get install mysql-client

然后使用以下命令访问数据库容器。

mysql -u<user> -p<pass> -h $(docker inspect --format '{{ .NetworkSettings.IPAddress }}' <db-container>)

该命令将自动获取docker容器的IP。

请务必将<user><pass><db-container>替换为您各自的值。在你的情况下:

mysql -uroot -ptest -h $(docker inspect --format '{{ .NetworkSettings.IPAddress }}' db)

您的命令允许mariadb在标准端口3306上运行。如果没有,您必须告诉mysql命令新端口。

答案 1 :(得分:3)

从MySQL命令行客户端连接到MariaDB 以下命令启动另一个mariadb容器实例,并针对原始mariadb容器运行mysql命令行客户端,允许您对数据库实例执行SQL语句:

$ docker run -it --link some-mariadb:mysql --rm mariadb sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

... some-mariadb是原始mariadb容器的名称。

有关MySQL命令行客户端的更多信息,请参阅MySQL文档

参考:https://hub.docker.com/_/mariadb/

答案 2 :(得分:2)

稍微不同的语法,在ubuntu 18.04上的docker 18.05.0-ce:

sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' db

答案 3 :(得分:2)

首先访问集装箱码头

 docker exec -it some-mariadb bash

'some-mariadb'是mysql容器名称

然后使用mysql terminal命令直接访问数据库

mysql -u root -p

答案 4 :(得分:0)

来自Official Mariadb website

从容器外部连接到MariaDB

如果我们尝试连接到localhost上的MariaDB服务器,则客户端将绕过网络连接,并尝试使用本地文件系统中的套接字文件连接到服务器。但是,当MariaDB在容器内运行时,这将不起作用,因为服务器的文件系统与主机隔离。客户端无法访问容器内的套接字文件,因此无法连接。

因此,即使客户端与服务器容器在同一台计算机上运行,​​也必须使用TCP与MariaDB服务器建立连接。

大多数MariaDB映像(包括官方映像)都使用#my.cnf#文件中的bind-address选项禁用了外部TCP连接。本指南中使用的docker镜像基于Ubuntu,因此该文件位于/etc/mysql/my.cnf。

要使用MariaDB,我们需要编辑配置文件以更改适当的选项,然后重新启动容器。

在容器内,编辑文件my.cnf并检查以bind-address开头的行。在行的开头添加一个哈希以将其注释掉:

#bind-address            = 127.0.0.1

保存文件。

当仍在容器内时,将关闭命令发送到MariaDB。这将关闭服务器并退出并返回主机:

mysqladmin -u root -p shutdown

再次启动容器。这次MariaDB服务器将启用联网:

docker start mariadbtest

找到已分配给容器的IP地址:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mariadbtest

您现在可以使用与该IP地址的TCP连接来连接到MariaDB服务器。

强制进行TCP连接

如上所述在MariaDB中启用网络连接后,我们将能够从容器外部连接到服务器。

在主机上,运行客户端并将服务器地址(-h)设置为在上一步中找到的容器的IP地址:

mysql -h 172.17.0.2 -u root -p

这种简单的连接形式在大多数情况下都应该起作用。根据您的配置,可能还需要指定服务器的端口或强制使用TCP模式:

mysql -h 172.17.0.2 -P 3306 --protocol=TCP -u root -p

集群容器和复制的端口配置

在单独的Docker容器中运行的多个MariaDB服务器可以使用TCP相互连接。这对于形成Galera群集或复制很有用。

通过Docker运行集群或复制设置时,我们希望容器使用不同的端口。实现此目的的最快方法是将容器端口映射到系统上的其他端口。我们可以在创建容器(docker run命令)时使用-p选项(必要时多次)来执行此操作。例如,对于Galera节点,我们将使用与此映射类似的映射:

-p 4306:3306 -p 5567:5567 -p 5444:5444 -p 5568:5568
相关问题