docker 常见报错
docker常见报错
OCI runtime exec failed: exec failed 容器报错
镜像是使用alpine制作的
docker exec -it 容器名/容器ID bash
//把bash改成 /bin/sh
docker exec -it 容器名/容器ID /bin/sh
Removal In Progress
容器无法删除,状态是Removal In Progress
systemctl stop docker
//获取容器挂载目录,一般是 /var/lib/docker
docker info | grep "Docker Root Dir"
//进入/var/lib/docker/containers,删除以这个容器ID开头的文件夹,然后重启docker
rm -rf ea354b1657baf838e3ab565264b3570d053c410e0f3f5c7fd7ef509444702cf9
systemctl start docker
Device or resource busy
我这里的报错是docker run的时候,脚本对一个-v挂载的文件sed替换报错,这是因为-v挂载的文件,在docker内的程序在未启动前文件是不可写的,但是这个文件是可以拷贝的,因此我拷贝了一份,sed的时候使用拷贝的这份配置文件
EXPORTERCONF="monitordata/application.conf"
EXPORTERCONFTMP="monitordata/application.conf.bak"
//sed替换拷贝后的文件
CHANGEVALUE() {
local filename=$1
local key=$2
local newvalue=$3
if [ $key ];then
cp ${filename} ${filename}.bak
sed -i "s/${key}=.*/${key}=${newvalue}/g" ${EXPORTERCONFTMP}
else
echo "no value" >> /dev/null
fi
}
//获取环境变量中的value
GETVALUEFROMENV() {
local envname=$1
env | grep -w ${envname} | awk -F= '{print $2}'
}
//传入key,value替换配置文件内容
INITCONFIGFILE() {
CHANGEVALUE ${EXPORTERCONF} ISREDIS ${ISREDISTMP}
}