如何访问我的 docker mariadb?
How can I access my docker maria db?
我的主要问题是,在我使用命令 docker run --name db -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 mariadb
为我的 mariadb 创建了一个 docker 容器后,我如何访问 sql 数据库?
我在某处看到了使用临时(退出容器后删除容器)容器的解决方案,但再也找不到了。
我正在搜索如下命令:sudo docker exec -it [other flags] [command] db
。
从 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 文档
只有 mysql-客户端,没有额外的 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 命令新端口。
语法略有不同,docker 18.05.0-ce on ubuntu 18.04:
sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' db
从容器外部连接到 MariaDB
如果我们尝试连接到本地主机上的 MariaDB 服务器,客户端将绕过网络并尝试使用本地文件系统中的套接字文件连接到服务器。但是,当 MariaDB 运行ning 在容器内时,这不起作用,因为服务器的文件系统与主机隔离。客户端无法访问容器内的socket文件,因此连接失败
因此必须使用 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
集群容器和复制的端口配置
多个 MariaDB 服务器 运行 在单独的 Docker 容器中可以使用 TCP 相互连接。这对于形成 Galera 集群或复制很有用。
当运行通过Docker连接集群或复制设置时,我们希望容器使用不同的端口。实现这一点的最快方法是将容器端口映射到我们系统上的不同端口。我们可以在创建容器时(docker 运行 命令)执行此操作,方法是使用 -p 选项,必要时多次使用。例如,对于 Galera 节点,我们将使用类似于此的映射:
-p 4306:3306 -p 5567:5567 -p 5444:5444 -p 5568:5568
首先进入集装箱码头
docker exec -it some-mariadb bash
'some-mariadb' is the mysql container name
然后使用mysql终端命令直接访问数据库
mysql -u root -p
我的主要问题是,在我使用命令 docker run --name db -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 mariadb
为我的 mariadb 创建了一个 docker 容器后,我如何访问 sql 数据库?
我在某处看到了使用临时(退出容器后删除容器)容器的解决方案,但再也找不到了。
我正在搜索如下命令:sudo docker exec -it [other flags] [command] db
。
从 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 文档
只有 mysql-客户端,没有额外的 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 命令新端口。
语法略有不同,docker 18.05.0-ce on ubuntu 18.04:
sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' db
从容器外部连接到 MariaDB
如果我们尝试连接到本地主机上的 MariaDB 服务器,客户端将绕过网络并尝试使用本地文件系统中的套接字文件连接到服务器。但是,当 MariaDB 运行ning 在容器内时,这不起作用,因为服务器的文件系统与主机隔离。客户端无法访问容器内的socket文件,因此连接失败
因此必须使用 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
集群容器和复制的端口配置
多个 MariaDB 服务器 运行 在单独的 Docker 容器中可以使用 TCP 相互连接。这对于形成 Galera 集群或复制很有用。
当运行通过Docker连接集群或复制设置时,我们希望容器使用不同的端口。实现这一点的最快方法是将容器端口映射到我们系统上的不同端口。我们可以在创建容器时(docker 运行 命令)执行此操作,方法是使用 -p 选项,必要时多次使用。例如,对于 Galera 节点,我们将使用类似于此的映射:
-p 4306:3306 -p 5567:5567 -p 5444:5444 -p 5568:5568
首先进入集装箱码头
docker exec -it some-mariadb bash
'some-mariadb' is the mysql container name
然后使用mysql终端命令直接访问数据库
mysql -u root -p