使用Docker Compose挂载卷未成功的解决方法

142次阅读
没有评论

问题描述

在尝试使用Docker Compose运行包含SQL Server数据库的容器时,遇到了无法通过Docker Compose挂载卷的问题。尽管使用docker run命令能够成功持久化数据,但在使用Docker Compose时却无法实现。用户希望在使用Docker Compose运行容器时,能够确保数据库中的数据持久化。

解决方案

请注意以下操作可能因版本差异而有所不同,建议在操作前做好数据备份。

方法1:将数据迁移到自动化挂载的卷

这是首选的方法,它将保留Docker Compose默认的卷管理方式,适用于你的情况。

  1. 停止所有正在使用这些卷的容器。
  2. 运行一个不包含MySQL(例如busybox)的虚拟容器,并挂载这四个卷到独立的可识别路径。
  3. 清空Docker Compose创建的所有卷中的数据。
  4. 将”仅Docker”卷中的所有数据复制到”Docker Compose”卷中。
  5. 停止并删除虚拟容器。
  6. 运行docker-compose up -d启动你的容器,确保数据持久化成功。
  7. 如果一切顺利,删除不再需要的其他卷。

方法2:使用外部卷

如果你了解相关操作,你也可以使用外部卷。但请注意查阅Docker Compose文档,以确保操作正确无误。特别要注意,使用docker-compose up -d命令将不再尝试创建不存在的卷,并在卷不存在时触发错误并停止。

在你的docker-compose.yml文件中,将卷的配置更改如下:

volumes:
  db-data-user:
    external:
      name: db-data-user
  db-data-system:
    external:
      name: db-data-system

注意事项

  • 使用Docker Compose时,它会根据项目名称自动为卷生成前缀,以避免不同项目之间的命名冲突。这可能导致你在docker-compose.yml文件中定义的卷名称与实际创建的卷名称不一致。详情请查阅Docker Compose文档。

通过以上方法,你应该能够在使用Docker Compose时成功持久化数据库中的数据。如果遇到任何问题,请务必备份数据并谨慎操作。

希望对你有所帮助!如果有更多疑问,请随时提问。

正文完