将带有数据的 Docker 容器克隆到另一个主机
Posted
技术标签:
【中文标题】将带有数据的 Docker 容器克隆到另一个主机【英文标题】:Clone Docker containers with data to another Host 【发布时间】:2018-06-24 19:09:32 【问题描述】:我有两个正在运行的 docker 容器。 一个容器有 mysql 和数据,另一个容器有 Tomcat 中的 Java Web 应用程序。
如何将 MySQL 容器克隆到另一个带有数据的 Docker 主机?
尝试了保存/加载方法。但没有成功,因为没有数据
但 Java Web 应用程序容器正在工作
【问题讨论】:
docker commit docs.docker.com/engine/reference/commandline/commit 然后保存/加载? ***.com/a/23938978/5330223 将它们上传到hub.docker.com 并从另一个 docker 主机下载? 是源机器 - docker commit old newcontainer docker save newcontainer > /tmp/newimage.tar 目标机器 - docker load 是的..docker commit
gist.github.com/thaJeztah/8d0e901bd21329d80cf2
【参考方案1】:
docker 保存容器的方式是使用docker commit。然而:
提交操作将不包括容器内安装的卷中包含的任何数据。
因此,保存在卷中的数据不会成为提交容器的一部分。 MySQL docker 镜像就是这种情况,它将数据保存在/var/lib/mysql
下并将其声明为 docker 卷。
有一个两步解决方案:
使用docker commit
将容器提交到新映像中,并将此映像传输到另一台机器。
使用docker cp <mysql-container>:/var/lib/mysql ./mysql-data
从旧容器中复制数据文件夹并将mysql-data
文件夹转移到新机器上。启动新容器时
在新主机上,使用docker run -v ./mysql-data:/var/lib/mysql ...
运行它。这将从旧容器中挂载数据文件夹,您应该会得到一个包含数据的相同容器。
【讨论】:
你能分享完整的命令来在新主机上启动新容器吗 @Mahadevan 启动mysql的命令在hub.docker.com/_/mysql。对于您的问题,将-v ./mysql-data:/var/lib/mysql
添加到运行命令是相关部分。我不知道您传递给容器的具体配置是什么。但是docker run --name mysql -v ./mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
会给出一个带有数据的mysql容器。【参考方案2】:
您是否尝试过创建数据卷容器?将卷目录挂载到mysql容器
docker create -v /var/lib/mysql --name mysqldata mysql
更多详情请参考此链接 https://www.melvinvivas.com/using-docker-data-volume-with-a-mysql-container/
【讨论】:
以上是关于将带有数据的 Docker 容器克隆到另一个主机的主要内容,如果未能解决你的问题,请参考以下文章
Docker:proxy_pass 到另一个容器 - nginx:在上游找不到主机
利用docker制作一个带有redis软件的镜像,供其他人使用