我按照官方指南使用 docker 安装了 mysql8docker mysql 入门
docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=xxx -d mysql:8.0
我注意到了以下现象:
-v
我在命令中没有使用卷docker run
,但在停止和启动之后,我可以看到我添加的数据库和数据仍然存在。(我在教程中发现,如果没有卷规范,重新启动容器后数据会丢失)- root 用户没有
'%'
允许的域,但它可以以某种方式登录 mysql 服务器,如下所示:
docker exec -it mysql8 mysql -uroot -p
主机服务器是否与 mysql 服务器位于同一域中?
- 虽然我可以使用 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
。