我已经开始在定义数据库的地方使用docker和docker组合。因为我没有在配置中定义卷(我的错误),所以数据库已经在容器中创建,现在下次运行docker-拉的时候,我将重新创建这个数据库,导致我的数据丢失。在不丢失数据的情况下将数据移出容器的最佳方法是什么?
db:
image: "mydbimage"
environment:
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_DATABASE: "jirio"
MYSQL_USER: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
Dockerfile
FROM mysql:5.6
ADD schema.sql /docker-entrypoint-initdb.d/schema.sql
如果您仍然拥有包含该数据的容器(退出并停止),您的第一步将是将其作为映像提交,以免丢失数据。
请参见docker容器提交
。这将保存容器内容,而不是其卷...但是无论如何它没有卷。
如果您的容器定义了自己的内部卷,请查看“我如何用它的数据卷备份Docker容器?”适用于您的情况。
然后,您可以基于已提交的映像运行一个新容器(用shell作为命令),这一次创建并安装一个新的数据卷容器。
运行后,在该shell中,您可以将数据压缩/复制到卷路径中(该路径实际上将写入数据卷容器)
最后,您可以将该数据卷容器重用到现有的docker compose中。yml
知道OP的映像是docker mysql: 5.6,它的Dockerfile定义了自己的内部卷,默认情况下不备份。
在这种情况下,如果容器仍在运行,最简单的方法是转储数据库:
# Backup
docker exec CONTAINER /usr/bin/mysqldump -u root --password=root DATABASE > backup.sql
获得数据后,可以再次运行映像,这次是使用安装了卷的主机文件夹或数据卷容器。
请参阅"Docker上的MySQL:构建容器映像"
但如果容器停止运行,则无法在其中执行命令(问题30361)
如果运行docker pull mysql:5.6
,您不会丢失数据,因为您运行的是mydbimage
的一个实例。
此外,除非使用docker rm-v
移除容器,否则不会丢失数据。Docker Compose也不会删除卷,除非运行Docker Compose rm-v
。
获取使用docker ps-a
运行mysql: 5.6的容器的名称或ID并运行:
docker运行--rm--卷-从$容器ubuntu tar-zcvf- /var/lib/mysql
注意:用容器的名称或ID替换
$container
。
然后可以将tarball解压缩到主机上的某个位置,比如/var/mysql,如果需要,可以更新
mydbimage
,并将这一行添加到Docker文件中:
volumes:
-v /var/mysql:/var/lib/mysql
注意:
docker commit
从不将卷保存在容器中。
安装配置镜像仓库docker-distribution 安装 # yum -y install docker-distribution # systemctl enable docker-distribution.service # systemctl start docker-distribution.service # systemctl status docker-distribution.
好的,我需要一个功能,我需要能够在图像本身的框架内正确定位图像。 正如您在图像中看到的,图像容器的大小是固定的,如果图像大于框架本身,我需要能够在框架内重新定位图像。我尝试用矩形剪切图像并将图像定位在矩形内,但剪辑会创建一个等于矩形大小的新图像,因此到目前为止还没有成功。类中是否有任何属性可以让我们移动图像位置?所以我找不到任何属性。非常感谢任何帮助。谢谢。
我们注意到我们的容器占用了很多空间,其中一个原因是图像。 我们想移动图像。 我知道现在它们存储在
我在Jackrabbit节点内容从一个路径移动到另一个路径时遇到了问题。 尝试将节点下的文档列表(从jcr中的临时节点)移动到新路径(新节点,不包含任何文档)。 节点是混合类型的。 以下是创建文档节点的部分代码片段: 节点类型说明: 希望使用jcr api本身移动内容,而不是让所有子节点迭代并移动到目标文件夹。 使用Jackrabbit core 2.6.0和JCR 2.0。
使用dockerfile打包太麻烦了!比如我想自己搭建一套php的开发环境,做成镜像,以后随时可用。并且我习惯使用堡塔作为面板工具。如果使用dockerfile的化,成本就太高了。 使用commit或者import/export的方式会导致镜像非常大! 是否有其他高效的打包方式可以,将容器打包成镜像?
我正在使用PostgreSQL创建一个简单的Spring Boot应用程序。我使用“docker-comush up”创建了2个图像和容器,我还使用Flyway将我的数据库表迁移到容器中。 问题是如何移动数据,或者如何在Docker容器应用程序上访问本地计算机上的数据库数据? 我在Docker容器上运行我的应用程序,并使用获取HTTP方法,但没有数据。我得到一个空的JSON,而如果我不使用Dock