docker迁移镜像并运行

在A服务器中

1. 查看容器详细信息

docker inspect task-manager

# 2. 提交容器为镜像(保留所有修改)

docker commit task-manager task-manager-backup:latest

# 3. 保存镜像为文件

docker save -o task-manager-backup.tar task-manager-backup:latest

docker save 镜像名:版本tag -o 打包后的文件名.tar

保存好,迁移到新的服务器后:

1. B 服务器:导入镜像(docker load)

复制代码
# 格式:docker load -i [tar包文件名]
docker load -i task-manager-backup.tar 

2. 验证导入

docker images

复制代码
$ docker images
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY                     TAG         IMAGE ID      CREATED      SIZE
localhost/task-manager-backup  latest      82cfc386c1bc  2 hours ago  1.13 GB

3.执行运行

复制代码
$ docker run -d -p 6006:6006 --name task-manager task-manager-backup
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.

4. 检查运行状态

docker ps
docker logs task-manager

5. 测试访问

curl http://localhost:6006

-----------------------------------------------------------------------------------------------------------

如果服务器重启等因素导致容器停止、容器名称冲突,则执行以下步骤:

复制代码
# 查看所有容器(包括停止的)
docker ps -a
复制代码
$ docker ps -a
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                                 COMMAND               CREATED         STATUS                    PORTS                   NAMES
137521875e42  localhost/task-manager-backup:latest  gunicorn -w 4 -b ...  15 minutes ago  Exited (0) 4 minutes ago  0.0.0.0:6006->6006/tcp  task-manager

问题分析

容器 task-manager 存在并且状态为 Exited (0),这意味着容器正常退出了。

解决方案

方案1:重启现有容器(最简单)

复制代码
# 直接重启容器
docker start task-manager

# 检查状态
docker ps

# 查看日志
docker logs task-manager

方案2:删除后重新创建

复制代码
# 删除已退出的容器
docker rm task-manager

# 重新运行(注意使用正确的镜像名称)
docker run -d \
  --name task-manager \
  -p 6006:6006 \
  localhost/task-manager-backup:latest  # 注意这里用了localhost/前缀

# 检查状态
docker ps

-----------------------------------------------------------------------

如何进入容器中查看代码目录:

复制代码
$ docker exec -it task-manager /bin/bash
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
root@137521875e42:/app# ls
Dockerfile   check_all_relationships.py  requirements.txt,

进入了容器并查看目录,如何复制一个文件到本地,然后修改后如何上传到容器这个目录。上传后,如何重新启动程序运行,如下:

复制代码
# 在宿主机执行(不是在容器内!)
# 退出容器
exit

# 然后执行:
# 复制单个文件到本地
docker cp task-manager:/app/app.py ./app.py.backup

# 复制整个目录到本地
docker cp task-manager:/app ./app_backup

# 查看复制的文件
ls -la app.py.backup
cat app.py.backup

在宿主机修改文件后:

复制代码
# 2. 上传到容器
docker cp ./app.py.backup task-manager:/app/app.py

# 3. 验证上传
docker exec task-manager cat /app/app.py | head -5

【查看目录结构 ls -R】

[移动根目录文件到static中

mv -f /app/script.js /app/static/script.js]

修改代码后通常需要重启应用,直接重启容器最简单:

复制代码
# 重启整个容器
docker restart task-manager

# 查看重启状态
docker ps | grep task-manager
docker logs --tail 20 task-manager
相关推荐
Elastic 中国社区官方博客1 分钟前
使用 OpenTelemetry 在 Elastic 中实现 Claude 平台的人工智能 agent 可观测性
大数据·运维·服务器·人工智能·elasticsearch·信息可视化·全文检索
hzxxxz7 分钟前
3个模块搭稳一条自动化链路:定时任务、幂等与对账
运维·自动化
吴声子夜歌8 分钟前
Kubernetes权威指南——Kubernetes安装配置指南(二进制文件安装)
容器·kubernetes
Ruiery31 分钟前
Linux 6.6内核内存管理深度解析(十):KSM 同页合并 — 内容去重,把 N 份相同内存合并成 1 份
linux·运维·服务器
江华森33 分钟前
Kubernetes集群部署实战:使用kubeadm在4台ECS服务器上搭建K8s v1.31集群
云原生·容器·kubernetes
Huangjin007_1 小时前
【Linux 系统篇(三十三)】通信(三):System V 共享内存详解
linux·运维·服务器
叼烟扛炮1 小时前
Linux 学习笔记(三十八):从实模式到分页——处理器内存管理的发展史
linux·运维·服务器
润滑卫士1 小时前
油液水分在线传感器技术对比:电容法、电阻法与微波法的测量原理与适用性
运维
Decay__1 小时前
附-01 · MySQL 压测与容量规划 —— sysbench 基准测试、容量评估与参数基线
运维·数据库·sql·mysql·架构
mennekes1 小时前
暗装插座箱 VS 明装插座箱,工地和车间怎么取舍
运维·网络·科技·安全·制造