我的主要问题是,在使用命令<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
这样的命令。
答案 0 :(得分:6)
在主机上安装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文档
答案 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)
如果我们尝试连接到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服务器。
如上所述在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