在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. 测试访问
-----------------------------------------------------------------------------------------------------------
如果服务器重启等因素导致容器停止、容器名称冲突,则执行以下步骤:
# 查看所有容器(包括停止的)
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