Docker问题记录

制作镜像的时候报错

devmapper: Thin Pool has 162394 free data blocks which is less than minimum required 163840 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

解决

# 清理exited进程:
docker rm $(docker ps -q -f status=exited)

# 清理dangling volumes:
docker volume rm $(docker volume ls -qf dangling=true)
 
# 清理dangling image:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)


docker ip nat 功能不正常

yum install iptables-services -y
cat >>/etc/sysctl.conf << EOF
net.ipv4.ip_forward=1
EOF
sysctl -p
systemctl restart network

删除镜像时出错1 Device is Busy

Error response from daemon: driver "devicemapper" failed to remove root filesystem for {containerId}: failed to remove device {deviceId}: Device is Busy

解决方法1
umount /var/lib/docker/devicemapper/mnt/{deviceId}

如果还不行

fuser -a /dev/mapper/docker-253:0-1310846-{deviceId} 得出引用的pid
kill -9 pid即可
解决方法2
find /proc/*/mounts | xargs grep -E "{containerId}"
# 输出
/proc/17259/mounts:shm /var/lib/docker/containers/e2d5e867c98dac2d71e5fc6e61eecc4e1dad6882ac1d4f580f4702b50d698c5e/shm tmpfs rw,nosuid,nodev,noexec,relatime,size=65536k 0 0

# 找到进程号之后
ps -eaf | grep 17259
# 输出
root     17259     1  0 15:33 ?        00:00:00 /usr/lib/systemd/systemd-machined

# 至此,可以知道是systemd-machined这个进程出的问题。
# 执行:
kill -9 17259
docker system prune

# 这样,docker环境恢复正常。

删除镜像时出错2 device or resource busy

Error response from daemon: Unable to remove filesystem for {containerId}: remove /var/lib/docker/containers/{containerId}/shm: device or resource busy

http://blog.kissingwolf.com/2017/09/09/Docker-%E6%95%85%E9%9A%9C%EF%BC%88device-or-resource-busy%EF%BC%89/

修改 /usr/lib/systemd/system/docker.service 配置文件 [Service] 段中加入 MountFlags=slave,解决Bug .
操作过程

systemctl stop docker
sed -i '/\[Service\]/aMountFlags=slave' /usr/lib/systemd/system/docker.service 
systemctl daemon-reload
systemctl start docker

创建容器时出错

docker: Error response from daemon: endpoint with name xxxx already exists in network host(或者是bridge)

这算是docker的一个bug!

解决办法1

名字重复了,给你的docker容器一个不同的名字

解决办法2

实测该方法无效

# 先删除容器
docker rm -f xxx

# 清理网络占用
docker network disconnect --force bridge xxxx
 
# 检查是否仍有同名容器占用
docker network inspect host/bridge

# 重新构建容器即可

猜你喜欢

转载自blog.csdn.net/weixin_34362991/article/details/87213320