使用 docker 安装 mysql 它们位于同一台服务器

使用 docker 安装 mysql 它们位于同一台服务器

我按照官方指南使用 docker 安装了 mysql8docker mysql 入门

 docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=xxx -d mysql:8.0

我注意到了以下现象:

  1. -v我在命令中没有使用卷docker run,但在停止和启动之后,我可以看到我添加的数据库和数据仍然存在。(我在教程中发现,如果没有卷规范,重新启动容器后数据会丢失)
  2. root 用户没有'%'允许的域,但它可以以某种方式登录 mysql 服务器,如下所示:
docker exec -it mysql8 mysql -uroot -p

主机服务器是否与 mysql 服务器位于同一域中?

  1. 虽然我可以使用 root 帐户登录主机中的 mysql,并且主机pwd文件夹中有一个 some.sql 文件,但我无法source some.sql在 mysql cli 中运行。我认为这是因为它们不在同一个域中,并且 mysql 在其容器内看不到 some.sql 文件。

请帮忙解释一下以上3点。谢谢。

答案1

我没有在 docker run 命令中使用 volume -v,但在停止并启动后,我可以看到我添加的数据库和数据仍然存在。(我在教程中发现,如果没有指定卷,重新启动容器后数据会丢失)

容器重启后数据仍会保留,但删除和重新创建后数据会保留。卷不会受此影响。

主机服务器是否与 mysql 服务器位于同一域中?

您正在容器中执行该命令,而不是在主机上,因此从 MySQL 服务器的角度来看,连接来自localhost。您可以使用mysql安装在主机或另一个容器中的客户端来建立连接,但这样做不起作用。

我认为这是因为它们不在同一个域中

那不相关。

并且 mysql 在其容器内看不到 some.sql 文件。

这是正确的。容器与主机隔离。它无法访问其文件系统。这就是容器化的意义所在:你希望东西在与主机隔离的情况下运行,并且不会影响主机。

您可以使用卷 ( -v /some/dir/on/host:/some/dir/in/container) 共享文件或目录,或者使用 复制文件docker cp

相关内容