【问题标题】:MariaDB docker accessing from host Windows 10 vs LinuxMariaDB docker 从主机 Windows 10 与 Linux 访问
【发布时间】:2021-02-12 18:37:48
【问题描述】:

事实证明,下面提到的 Docker/Windows 问题的原因是我这边的 Hyper-V 的本地网络问题。所以这与 Docker 在 Windows 和 Linux 上的区别无关,也与 MariaDB 没有任何关系。我想删除该问题,但不鼓励这样做,因为它已经得到了答案。


我是 docker 新手,但不是 MySQL。我想在 Docker 中使用 MariaDB。我在 Windows 10 和 Ubuntu 上都创建了 Docker 安装。

对于 MariaDB 容器,我按照https://mariadb.com/kb/en/installing-and-using-mariadb-via-docker/ 此处的描述进行操作,因为它似乎比这更准确:https://hub.docker.com/_/mariadb

我使用以下方法创建了一个 MariaDB 容器:

docker run --name mariadb -e MYSQL_ROOT_PASSWORD=test -d mariadb:latest

“最新”拉取 MariaDB 服务器 10.5.8。

我验证在my.cnf中启用了通过端口3306的tcp访问

[client-server]
port=3306

从容器内部运行 MySQL 客户端工作

docker exec -it MariaDB MySQL -u root -p

从主机运行 MySQL 客户端

mysql -h 172.17.0.2 -u root -p

适用于我的 Ubuntu 主机,但不适用于我的 Windows 10 主机。在 Windows 上,该命令会在一段时间后返回而没有任何消息。

你能告诉我原因并帮助我吗?

【问题讨论】:

  • 我认为我的办公室 PC 遇到了网络问题。从docs.docker.com/docker-for-windows/networking 我了解到,在 Windows 上我必须使用 -p 端口映射。我已经尝试过了,但没有成功。现在我在另一台 PC(我的家用 PC)上设置了 Docker 和 MariaDB 容器,它立即工作。我想我可能应该删除这个问题并创建一个与 MariaDB 无关的新的更通用的网络问题。

标签: docker mariadb


【解决方案1】:

更新您的命令以在 Ubuntu 系统的 docker 中运行 mysql:

docker run --name mariadb -e MYSQL_ROOT_PASSWORD=test -d mariadb:latest --port 3306:3306

在 Windows 和 Linux 中检查 WSL 网络适配器的 IPv4 地址

打开powershell执行ifconfig命令,然后找到WSL网卡:

Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::e96c:c3d6:464e:2a3b%72
   IPv4 Address. . . . . . . . . . . : 172.20.240.1
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :

您的 Windows IP 是 172.20.240.1

现在使用ip a 命令找出 Linux 主机 IP,并在与 Windows 相同的网络中查看 IP:

5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:ce:28:8e brd ff:ff:ff:ff:ff:ff
    inet 172.20.252.177/20 brd 172.20.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fece:288e/64 scope link
       valid_lft forever preferred_lft forever

从windows连接到linux服务器

mysql -u root -h 172.20.252.177 -P 3306 -p

Linux 与 Windows 上的 Docker

在 Linux 上,docker 在您的系统中以本机方式工作。没有适用于 Windows 的官方 docker 版本。这意味着您需要在 Windows(以及 MacOS)中模拟 linux 机器并在那里运行 docker daemon。

当您模拟 linux 时,管理程序会为您的模拟系统创建新网络,因此 docker 不会在 localhost 上运行。

作为用户,您的主要区别在于,您不能像本地主机一样访问在 docker 中运行的应用程序,因为它在具有自己的网络 IP 的 VM 中运行。

另一个区别是资源可用性。 在 linux 中,docker deamon 可以访问您的所有资源(CPU、内存、HDD、网络等)。当然你可以为它创建配额,不过暂时不用担心。

在 Windows 中,您运行 VM 并将一些有限的资源分配给模拟的 Linux。例如 20 GB 硬盘、1vCPU 和 2GB 内存。这对于您的应用程序的性能很重要。它们在 Windows 中会比在 Linux 中慢(如果需要更多资源)。

但是当我在 Windows 上工作时。我喜欢它,因为我可以创建 docker VM 的快照,并且可以将其复制到另一台计算机。这很神奇,因为您在安装或更换计算机时无需配置系统。

【讨论】:

  • 我的问题不是关于从 Windows 机器访问 Docker/Ubuntu 上的 MariaDB。这是关于比较两种安装的主机访问权限。实际上,我想在 Windows 上使用 Docker,但是这里的主机访问对我不起作用,如教程中所述。另一方面,在 Ubuntu Docker 上,它立即生效。
  • 我更新了主要区别。没有太大的差异。主要区别在于,没有适用于 Windows 的 Docker。您可以在 windows 中使用它,但实际上它是在 Linux VM 上运行的。
  • 感谢您的解释。我不知道该怎么处理这个问题,或者我是否应该最好删除它。我的问题原因是本地网络问题,除非我将我的问题集中在这个网络问题上,否则不会引起普遍关注。建议?
猜你喜欢
  • 1970-01-01
  • 2014-11-02
  • 2022-10-06
  • 2019-08-08
  • 2020-08-03
  • 2017-02-22
  • 2021-05-25
  • 1970-01-01
  • 2021-05-07
相关资源
最近更新 更多