我是 Docker 新手,仍在探索中,我遇到了这个问题,可能看起来很愚蠢,但我真的被困住了。
所以我有一个使用 MySQL 服务器的 Spring boot 应用程序,我想在容器上运行我的应用程序。
我设法“运行一个没有 MySQL 的应用程序”。
现在我正在按照本教程在容器中安装 MySQL 并使用该容器来运行我的应用程序。
https://medium.com/@itsromiljain/dockerize-rest-spring-boot-application-with-hibernate-having-database-as-mysql-579abcc4edc4 https://medium.com/@itsromiljain/dockerize-rest-spring-boot-application-with-hibernate-having-database-as-mysql-579abcc4edc4
所以当我运行这个命令时:
docker run -p 6603:3306 --name=docker-mysql --env="MYSQL_ROOT_PASSWORD=root" --env="MYSQL_PASSWORD=root" --env="MYSQL_DATABASE=test" mysql
i get this error :
我的猜测是因为我的机器上安装并运行了 MySQL,但我不相信,因为容器应该是隔离的。
PS:我正在使用 Windows 容器的 Windows 10 计算机上运行 docker。
谢谢。
编辑:这是错误的文本格式
2019-02-08T09:09:23.467525Z 1 [错误] [MY-012574] [InnoDB] 无法锁定./ibdata1 错误:95
2019-02-08T09:09:23.468063Z 1 [错误] [MY-012592] [InnoDB] 文件操作中的操作系统错误号 95。
2019-02-08T09:09:23.468133Z 1 [ERROR] [MY-012596] [InnoDB] 错误号 95 表示“不支持操作”
2019-02-08T09:09:23.468193Z 1 [错误] [MY-012215] [InnoDB] 无法打开数据文件“./ibdata1”
2019-02-08T09:09:23.468275Z 1 [错误] [MY-012959] [InnoDB] 无法打开或创建系统表空间。如果您尝试将新的数据文件添加到系统表空间,但在这里失败了,您现在应该将 my.cnf 中的 innodb_data_file_path 编辑回原来的状态,并删除 InnoDB 在这次失败的尝试中创建的新 ibdata 文件。 InnoDB只写了那些全是零的文件,但还没有以任何方式使用它们。但要小心:不要删除包含您宝贵数据的旧数据文件!
2019-02-08T09:09:23.468387Z 1 [错误] [MY-012929] [InnoDB] InnoDB 数据库创建因错误无法打开文件而中止。在尝试再次启动之前,您可能需要删除 ibdata1 文件。
2019-02-08T09:09:24.070144Z 0 [错误] [MY-010020] [服务器] 数据字典初始化失败。
2019-02-08T09:09:24.070172Z 0 [错误] [MY-013236] [服务器] 新创建的数据目录 /var/lib/mysql/ 不可用。您可以安全地将其删除。
2019-02-08T09:09:24.070759Z 0 [错误] [MY-010119] [服务器] 正在中止
2019-02-08T09:09:24.072260Z 0 [系统] [MY-010910] [服务器] /usr/sbin/mysqld:关闭完成(mysqld 8.0.15)MySQL 社区服务器 - GPL。
首先:在我的 Ubuntu Linux 机器上运行确切的 docker 命令,在容器内运行 mysql,没有任何问题。
当然,这对你没有帮助,所以让我们看看你的问题:
这个问题应该与本地机器上运行的mysql实例无关,因为正如您所说,docker容器内的应用程序与主机是隔离的。
看来这是存储的问题。由于某种原因,docker容器内的mysql应用程序无法使用/var/lib/mysql(同样,在docker容器内)。错误消息清楚地表明了这一点:
...数据目录/var/lib/mysql 不可用。
这可能是你的 docker 安装本身的问题、镜像的问题或者容器内 mysql 配置的问题。我想说的第二个不太可能,因为 mysql docker 镜像被广泛使用,并且被认为相当稳定。后一个选项始终是可能的,但由于您所做的与 docker hub 页面上的示例没有太大不同,并且我能够在我的计算机上运行确切的命令,因此我倾向于责怪第一个选项。
您是否尝试过为映像提供 docker 卷? (看https://docs.docker.com/storage/ https://docs.docker.com/storage/供全球参考)
最简单的类型由 docker 管理并添加到 docker 命令中,如下所示:
-v mysql_data:/var/lib/mysql
您的命令将变为:
docker run -v mysql_data:/var/lib/mysql -p 6603:3306 --name=docker-mysql --env="MYSQL_ROOT_PASSWORD=root" --env="MYSQL_PASSWORD=root" --env="MYSQL_DATABASE=test" mysql
如果要将其安装到主机上的目录,请使用以下参数:
-v <local path>:/var/lib/mysql
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)