XEN实例迁移到VPC后Docker容器启动失败

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: XEN实例迁移到VPC后Docker容器启动失败

问题背景:经典网络迁移到专有网络后,服务器内的docker容器无法启动


问题排查:


1 登录主机里面执行docker start container ID 提示这个错误:error response from daemon: linux runtime spec resourceserror: failed to start containers: ba6b8d747f67,这个错误并没有直接透出来真实原因,初步怀疑和docker用的runtime有关系,应该是docker-containerd-shim 调用docker runtime这个位置出现了问题,因为用户docker版本比较低,docker大致架构如下:



2 因为返回的信息还不够明确,所以第二步打开docker server的debug日志,然后在执行strace -e trace=all docker start container ID 做追踪看看系统调用以及debug级别的日志,docker 开启debug日志级别的方法如下:/etc/docker/daemon.json中增加"debug": true, 然后systemctl reload docker,不过打开后发现日志还是提示有资源没找到



3 通过现有的日志目前怀疑两个方向:

(1)用户docker环境的runtime有问题(依赖的资源找不到等),为了验证这个,临时给ECS绑定了一个eip,然后执行 :docker run -it --rm ubuntu echo OK 这个命令新建了一个容器验证了下,是可以正常跑通运行的,可以排除环境runtime的问题了


(2)配置里面有依赖某些资源,但是资源发生了改变,通过strace+社区文档了解到,docker在启动已有容器时会读取docker/containers/容器ID/ 里面的一个hostconfig.json的文件,里面定义了相关启动的配置,例如挂载的数据卷,定义的port等等,通过对比用户的发现了异常,信息如下:


4  经过hostconfig.json里面的内容,看到用户多个异常的容器都通过blkioDeviceReadIOps 指定磁盘设备名称限制了io,但是由于 迁移后磁盘设备名称发生变化引发了业务容器没法启动(迁移后默认设备名称会修改,具体可以参考这个文档核查:https://help.aliyun.com/document_detail/195861.html),所以提示了有资源找不到!后面解决方案如下:

(1)先把docker服务停止(systemctl stop doker)。

(2)执行grep -rl "xvda" /data3/docker/containers | xargs sed -i 's/xvda/vda/g' 这个命令把设备名称全部替换为vda

(3)最后systemctl start docker启动服务,docker start 容器ID把业务容器启动 (如果业务容器比较多,而且都需要启动的话, 可以执行docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) )

ps:

1 如何找到hostconfig.json,可以先执行docker info这个命令,会有一个Docker Root Dir 参数,里面指定的目录就是container 容器的加目录

2 如何查看已有容器的配置,可以执行docker inspect container id

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云专有网络VPC使用教程
专有网络VPC可以帮助您基于阿里云构建出一个隔离的网络环境,并可以自定义IP 地址范围、网段、路由表和网关等;此外,也可以通过专线/VPN/GRE等连接方式实现云上VPC与传统IDC的互联,构建混合云业务。 产品详情:https://www.aliyun.com/product/vpc
相关文章
|
1月前
|
存储 运维 Kubernetes
云端迁移:备份中心助力企业跨云迁移K8s容器服务平台
本文将简要介绍阿里云容器服务ACK的备份中心,并以某科技公司在其实际的迁移过程中遇到具体挑战为例,阐述如何有效地利用备份中心来助力企业的容器服务平台迁移项目。
|
3月前
|
存储 Docker 容器
Docker工作目录迁移
Docker工作目录迁移
|
2月前
|
SQL Shell 数据库
在TDengine容器中创建初始化数据库的Shell命令实例
以上就是在Docker容器环境中部署并初始化TDengine数据库的全过程,希望对你有所帮助。
86 0
|
3月前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
221 0
|
4月前
|
运维 Ubuntu Shell
掌握Docker容器的创建:从镜像到实例
【8月更文挑战第27天】
781 4
|
4月前
|
存储 Linux Docker
备份和迁移Docker容器
【8月更文挑战第21天】在Linux系统中,备份与迁移Docker容器可通过以下步骤实现:首先,查找并记录需备份容器的ID或名称;其次,若容器正在运行,则需先停止;最后利用`docker export`命令将其导出为tar归档文件以完成备份。对于容器迁移,有两种常见方式:一是直接迁移备份文件至目标服务器,并通过`docker import`命令导入新容器;二是通过创建容器镜像,并推送至镜像仓库,之后在目标服务器上拉取该镜像并运行。值得注意的是,在进行容器迁移时应确保Docker版本兼容,同时关注数据存储、网络配置及权限设置等问题,以保障容器功能正常运作。
243 2
|
4月前
|
Kubernetes Unix Linux
k8s将节点容器运行时从Docker迁移到Containerd
k8s将节点容器运行时从Docker迁移到Containerd
|
20天前
|
弹性计算 安全 容灾
阿里云DTS踩坑经验分享系列|使用VPC数据通道解决网络冲突问题
阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。本文介绍如何使用VPC数据通道解决网络冲突问题。
73 0
|
7月前
|
弹性计算 监控 开发工具
【阿里云弹性计算】阿里云ECS的网络优化实践:VPC配置与网络性能提升
【5月更文挑战第29天】阿里云ECS通过虚拟私有云(VPC)提供高性能、安全的网络环境。VPC允许用户自定义IP地址、路由规则和安全组。配置包括:创建VPC和交换机,设定安全组,然后创建ECS实例并绑定。优化网络性能涉及规划网络拓扑、优化路由、启用网络加速功能(如ENI和EIP)及监控网络性能。示例代码展示了使用Python SDK创建VPC和交换机的过程。
434 3
|
4月前
|
敏捷开发 网络协议 测试技术
阿里云云效产品使用合集之在vpc网络里,如何升级agent
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。