Docker 存储目录迁移-实操

介绍

  • Docker 默认将容器和镜像的数据存储在 /var/lib/docker 目录中。
  • 如果 /var 所在的磁盘空间不足,可以通过以下步骤迁移 Docker 的默认存储目录到其他磁盘位置
  • 在 Docker Swarm 集群中,每个节点可以配置不同的 daemon.json 文件,使用不同的 data-root 路径,这是完全支持的。

注意事项

  • 迁移过程中,确保 Docker 服务已完全停止,以避免数据损坏。
  • 如果涉及多节点或复杂配置(如 Swarm 或 Kubernetes),在迁移前备份配置并测试新路径的兼容性。
  • 如果 Docker 是通过某些特殊方式安装(如自定义编译),上述路径可能有所不同,请根据具体环境调整。
  • 备份数据:迁移之前建议对现有 Docker 数据进行备份。
  • 磁盘空间:确认目标磁盘有足够的空间来容纳 Docker 数据。

一般docker环境

步骤 1:检查现有 Docker 数据目录

# Docker 默认存储目录是 /var/lib/docker,您可以先确认当前使用的目录:
docker info | grep "Docker Root Dir"

# 输出类似如下,说明当前默认路径:
Docker Root Dir: /var/lib/docker

步骤 2: 检查 Docker 服务状态

# 禁用 docker.socket
sudo systemctl stop docker.socket
sudo systemctl disable docker.socket

# 停止 Docker 服务:
sudo systemctl stop docker

# 确保 Docker 服务已停止:
sudo systemctl status docker

# 输出中应显示 Active: inactive (dead) 

步骤 3: 创建新的存储目录

# 假设你想将 Docker 数据迁移到 /data/docker,先创建目标目录:
sudo mkdir -p /data/docker

# 确保新目录具有适当的权限:
sudo chown -R root:docker /data/docker
sudo chmod -R 755 /data/docker

# 复制原有数据到新目录:
sudo rsync -aP /var/lib/docker/ /data/docker/

说明:
-a:保持文件权限、时间戳等属性。
-P:显示进度并在中断后恢复传输。

# 完成后,建议检查文件数量和大小,确保源目录和目标目录一致:
du -sh /var/lib/docker
du -sh /data/docker

步骤 4: 修改 Docker 配置

# 编辑 Docker 配置文件,通常位于 /etc/docker/daemon.json,如果文件不存在则创建:
sudo vi /etc/docker/daemon.json

添加或修改以下配置,将数据目录指向新路径:
{
    "data-root": "/data/docker"
}

步骤 5:重新加载配置并启动 Docker 服务

# 重新加载守护进程并启动 Docker 服务。
sudo systemctl daemon-reload
sudo systemctl start docker

# 检查 Docker 服务状态,确保其运行正常:
sudo systemctl status docker

# 恢复 Docker 服务和 socket
sudo systemctl enable docker.socket

步骤 6:验证迁移是否成功

# 检查 Docker 的数据目录是否已经变更:
docker info | grep "Docker Root Dir"

# 输出应类似于:
Docker Root Dir: /data/docker

步骤 7: 清理旧数据(可选)

# 确认 Docker 使用新目录无误后,可以删除旧的 /var/lib/docker 数据以释放空间:
sudo rm -rf /var/lib/docker

Docker swarm环境

迁移 data-root 前,先将节点设置为 drain 状态:

# 查看所有节点:
docker node ls

docker node update --availability drain <NODE-ID>

确保没有运行中的服务实例后再执行一般Dokcer环境的迁移步骤。

执行完毕后恢复节点为 active 状态:

# 将节点设置为 active 状态: 
docker node update --availability active <node-name>

Kubernetes 环境

步骤 1:检查当前 Docker 和 K8s 状态

  • 检查现有 Docker 数据目录
# 确认当前 Docker 数据目录:
docker info | grep "Docker Root Dir"

# 输出示例:
Docker Root Dir: /var/lib/docker
  • 检查 Kubernetes 节点状态
# 在控制面板所在机器检查集群节点状态:
kubectl get nodes

# 确保所有节点处于 Ready 状态。
  • 确认工作负载
# 列出当前运行的 Pod 和服务:
kubectl get pods -A
kubectl get svc

步骤 2:准备迁移环境

  • 停止 Kubernetes 工作负载
# 将节点设置为不可调度状态并逐步迁移工作负载:
kubectl drain <NODE_NAME> --ignore-daemonsets --delete-emptydir-data
<NODE_NAME>:需要迁移的节点名称。
--ignore-daemonsets:忽略 DaemonSet。
--delete-emptydir-data:删除 emptyDir 存储卷的数据。

再执行一般Dokcer环境的迁移步骤即可。

  • 恢复Kubernetes 工作负载
    # 使用 kubectl uncordon 命令将节点恢复为可调度状态,即取消 drain 操作:
    kubectl uncordon <NODE_NAME>
    
    # 验证节点状态:
    kubectl get nodes
    
    # 检查被调度的 Pod:
    kubectl get pods --all-namespaces -o wide
    

完成以上步骤后,Docker 的默认存储目录就成功迁移了。

<think>嗯,用户想了解使用docker-compose部署wekan的详细步骤。从用户提问看,ta应该是有一定docker基础的技术人员,但可能不熟悉wekan的具体部署流程。 翻看了一下站内引用资料,发现几个关键点:引用[3]提供了安装docker-compose的命令,引用[1]和[4]都提到了docker-compose up这个核心指令。有意思的是引用[2]提到迁移问题,说明用户后续可能会有服务器迁移需求,这个可以放在优化建议里提前提醒。 用户特别强调要"详细步骤",说明ta可能需要从头开始的完整指导。考虑到wekan部署有几个易错点:compose文件配置、端口冲突、持久化存储,这些都需要重点说明。引用[4]里那个python依赖警告看起来无关紧要,可以忽略。 部署流程需要拆解成:准备环境→编写配置文件→启动服务→后续维护四个部分。其中配置文件最关键,需要给出完整示例并解释每个参数作用。用户上次问的是"方法",这次要"详细步骤",说明ta可能已经查阅过概要文档,现在需要实操指导。 注意到引用[1]提供了升级方法,这个对用户也很实用,可以放在优化建议里作为增值信息。另外引用[2]的迁移问题提醒我要强调数据卷配置的重要性,否则用户以后迁移服务器会很头疼。 </think>以下是使用 Docker Compose 部署 Wekan 的详细步骤,整合了最佳实践和注意事项: --- ### **详细部署步骤** #### 1️⃣ **安装 DockerDocker Compose** ```bash # 安装 Docker sudo apt-get update sudo apt-get install docker.io # 安装 Docker Compose(需适配系统架构) sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` #### 2️⃣ **创建 Wekan 项目目录** ```bash mkdir ~/wekan && cd ~/wekan ``` #### 3️⃣ **创建 `docker-compose.yml` 文件** ```yaml version: '3.8' services: wekan-db: image: mongo:6.0 container_name: wekan-db restart: always volumes: - wekan-db:/data/db - wekan-db-dump:/dump networks: - wekan-tier wekan-app: image: wekanteam/wekan:latest container_name: wekan-app restart: always depends_on: - wekan-db environment: - MONGO_URL=mongodb://wekan-db:27017/wekan - ROOT_URL=http://localhost:8080 # 替换为你的公网IP或域名 - PORT=8080 ports: - "8080:8080" networks: - wekan-tier volumes: wekan-db: wekan-db-dump: networks: wekan-tier: driver: bridge ``` #### 4️⃣ **启动 Wekan 服务** ```bash docker-compose up -d # 后台启动容器 ``` #### 5️⃣ **验证部署** ```bash docker ps # 应显示 wekan-db 和 wekan-app 两个容器 curl http://localhost:8080 # 返回 HTML 即表示成功 ``` --- ### **关键配置说明** 1. **数据持久化** - 通过 `volumes` 配置确保 MongoDB 数据持久存储(避免容器重启数据丢失) - 默认存储路径:`/var/lib/docker/volumes/wekan_wekan-db` 2. **环境变量** - `ROOT_URL`:必须设置为服务器公网访问地址(如 `https://wekan.yourdomain.com`) - `PORT`:容器内部端口(需与 `ports` 映射端口一致) 3. **网络配置** - 自定义网络 `wekan-tier` 实现容器间通信(DB 与 App 隔离) --- ### ▶️ **后续操作指南** #### **升级 Wekan 版本** ```bash cd ~/wekan docker-compose pull # 拉取最新镜像 docker-compose down # 停止旧容器 docker-compose up -d # 重启新容器 ``` #### **迁移到新服务器** 1. 备份数据卷: ```bash docker run --rm -v wekan_wekan-db:/volume -v $(pwd):/backup alpine tar cf /backup/wekan-db.tar /volume ``` 2. 在新服务器恢复: ```bash docker run --rm -v wekan_wekan-db:/volume -v $(pwd):/backup alpine sh -c "rm -rf /volume/* && tar xf /backup/wekan-db.tar" ``` --- ### ⚠️ **常见问题解决** - **端口冲突**:修改 `docker-compose.yml` 中的 `ports` 为 `"新端口:8080"`(如 `"8090:8080"`) - **启动失败**:检查日志 `docker logs wekan-app`,常见于 `ROOT_URL` 配置错误 - **性能优化**:添加环境变量 `- DISABLE_WEBSOCKETS=true` 可降低内存占用(牺牲实时更新)[^4] > 部署成功后,通过 `http://服务器IP:8080` 访问 Wekan 面板,首次登录自动创建管理员账号。 --- ### 🔍 相关问题 1. Wekan 如何配置邮件通知功能? 2. 如何为 Docker 部署的 Wekan 添加 SSL 证书? 3. Wekan 数据库备份与恢复的最佳实践是什么? [^1]: Wekan 官方推荐使用 Docker Compose 实现一键升级 [^2]: 数据卷迁移需保持 MongoDB 版本一致性 [^3]: Docker Compose 需匹配宿主机架构(x86/ARM) [^4]: 资源限制配置可优化容器性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值