Docker-in-Docker内执行docker container ls报错server misbehaving
报错原因
- 你使用的无后缀
docker:20.10镜像仅内置Docker客户端,默认不会启动Docker服务端进程,客户端默认会尝试连接tcp://docker:2375地址的服务端 - 首次执行时可正常运行,大概率是当时环境满足以下任一条件:无意中挂载了宿主机的
/var/run/docker.sock到容器内、环境变量DOCKER_HOST指向了可达的Docker服务端地址、容器网络内存在名为docker且开放了2375端口的服务端主机 - 本次执行时上述条件失效,容器的DNS服务无法解析
docker主机名,因此抛出解析失败报错
解决方案
根据使用场景选择对应方案即可:
方案1:用容器内客户端操作宿主机Docker服务
启动时挂载宿主机的Docker套接字文件,容器内客户端会直接通过套接字和宿主机服务端通信:
docker run -it -v /var/run/docker.sock:/var/run/docker.sock docker:20.10
方案2:使用完全隔离的Docker-in-Docker环境
需要使用带dind后缀的镜像,同时授予特权权限,镜像启动后会自动运行内部的Docker服务端:
docker run -it --privileged docker:20.10-dind
内容的提问来源于stack exchange,提问作者PSKP
相关产品推荐
相关产品推荐

