在 mysql 容器中提交数据
- 2024-11-11 08:27:00
- admin 原创
- 23
问题描述:
我使用官方支持的mysql 镜像创建了一个 mysql 容器。我运行镜像并挂载了一个包含 sql 转储的文件夹,然后在容器中创建了一个新的数据库并在其中导入了 .sql 转储:
sudo docker run --name mysql-psat1 -v /opt/Projets/P1/sqldumps:/mnt -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest
sudo docker exec -it mysql-psat1 bash
> mysql -uroot -psecret -e 'create database liferay_psat1;'
> mysql -uroot -psecret liferay_psat1 < /mnt/liferay_sql_dump.sql
然后我列出正在运行的容器以获取该容器的 ID:
sudo docker ps -a
然后,我将容器(包含导入的 SQL)提交为新的容器镜像
sudo docker commit -m "Imported liferay sql dump" <id-of-the-container> jihedamine/mysql-psat1:v1
但是,当我使用该新映像启动容器时,mysql 数据库不包含新创建的数据库 liferay_psat1。
sudo docker run -ti jihedamine/mysql-psat1:v1 bash
> mysql -uroot -psecret
# show databases;
我做错什么了?
感谢您的帮助!
解决方案 1:
官方 mysql 镜像将数据存储在卷中。通常情况下,这是理想的做法,这样您的数据就可以在容器的生命周期之外继续存在,但数据卷会绕过 Union 文件系统,不会提交到镜像中。
您可以通过创建自己的没有卷的 mysql 基础映像来完成您要做的事情。然后,您将能够添加数据并将其提交到映像,但提交后添加到正在运行的容器中的任何数据都将在容器消失时丢失。
解决方案 2:
根据@dekin的研究,我这样做来解决这个问题:
Dockerfile:
FROM mysql:latest
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]
构建并运行:
docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql
解决方案 3:
根据@Robert 的回答,我最终得到了这样的结论Dockerfile
:
FROM mysql:5.6.22
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
RUN sed -i -e "s|/var/lib/mysql|/var/lib/mysql-no-volume|" /etc/mysql/my.cnf
覆盖CMD
对我来说不起作用,容器因一个奇怪的错误而停止:
2019-02-21 15:18:50 1 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Table 'mysql.plugin' doesn't exist
2019-02-21 15:18:50 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
我猜想原始CMD
命令正在执行现在缺失的更多操作(在@Robert 的回答中),所以我采用了不同的方法。我没有尝试使用latest
版本,但我认为它应该可以工作。
解决方案 4:
如果您正在使用docker-compose
,则无需构建自定义镜像。只需--datadir=/var/lib/mysql-no-volume
在拉取镜像时将标志添加到命令中即可mysql
。
例子:
version: '2.4'
services:
mysql:
image: mysql:5.7
command: "mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --datadir=/var/lib/mysql-no-volume"
解决方案 5:
尝试通过喜欢的容器连接到外面正在运行的容器:
sudo docker run --name mysql-psat1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest
docker run --rm -i -t -v /opt/Projets/P1/sqldumps:/mnt --link mysql-psat1:mysqlserver mysql:latest /bin/bash
> mysql --host $MYSQLSERVER_PORT_80_TCP_ADDR --port $MYSQLSERVER_PORT_80_TCP_PORT -uroot -psecret -e 'create database liferay_psat1;'
> mysql --host $MYSQLSERVER_PORT_80_TCP_ADDR --port $MYSQLSERVER_PORT_80_TCP_PORT -uroot -psecret liferay_psat1 < /mnt/liferay_sql_dump.sql
然后停止两个容器并提交具有名称的服务器容器mysql-psat1
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD