Docker常见问题总结(持续更新)

  • Post author:
  • Post category:其他




一、镜像相关问题



1、如何批量清理临时镜像文件?

#docker rmi $(DOCKER IMAGES  -qf dangling=true)


2、如何查看镜像支持的环境变量?

#docker run IMAGE env


3、本地的镜像文件都存放在哪里?

与Docker相关的本地资源都存放在/var/lib/docker/目录直,以aufs文件系统为例,其中container目录存放容器信息,graph目录存放镜像信息,aufs目录下存放具体的镜像层文件。


4、构建Docker像应该遵循哪些原则?

整体原则上,尽量保持镜像功能的明确和内容的精简,要点包括:

  • 尽量选取满足需求但较小的基础系统镜像,例如大部分时候可以选择debian:wheezy或debian:jessie镜像,仅有不足百兆大小;

  • 清理编译生成文件、安装包的缓存等临时文件;

  • 安装各个软件时候指定准确的版本号,并避免引入不需要的依赖;

  • 从安全角度考虑,应用要尽量使用系统的库和依赖;

  • 如果安装应用时候需要配置一些特殊的环境变量,在安装后要还原不需要保持的变量值;

  • 使用Dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录。


5、碰到网络问题,无法pull镜像,命令行指定http_proxy无效,怎么办?

在Docker配置文件中添加export http_proxy=”

http://<PROXY_HOST>:<PROXY_PORT>”,之后重启Docker服务即可。



二、容器相关问题


1、容器退出后,通过docker ps命令查看不到,数据会丢失么?

容器退出后会处于终止(exited)状态,此时可以能过docker ps -a 命令查看。其中的数据也不会丢失,还可以通过docker start命令来启动它。只有删除掉容器才会清除所有数据。


2、如何停止所有正地运行的容器?

docker kill $(docker ps -q)


3、如何清理批量后台停止的容器?

docker rm -f $(docker ps -qa)


4、如何获取某个容器的PID信息?

docker  inspect  –format ‘{

{ .State.Pid }}’ <CONTANINERID or NAME>


5、如何获取某个容器的IP地址?

dpcler   inspect  –format  ‘{

{ >NetworkSettings.IPAddress }}’  <CONTANINERID or NAME>


6、如何给容器指定一个固定IP地址,而不是每次重启容器IP地址都会变?

目前Docker并没有提供直接的对容器IP地址的管理支持,可以在网上查找容器网络配置创建点对点连接的案例,来手动配置容器的静态IP。或者在容器启动后,再手动进行修改。


7、如何临时退出一个正在交互的容器的终端,而不终止它?

按Ctrl-p Ctrl-q。如果按Ctil-c往往会让容器内应用进程终止,进而会终止容器。


8、使用docker port 命令映射容器的时,系统报错“Error: No Public port  ’80’ published for xxx” ,怎么办?

创建镜像时Dockerifle要通过EXPOSE命令指定正确的开放端口;容器启动时指定PublishAllPort=true。


9、可以在一个容器中同进运行多个应用进程么?

一般并不推荐在同一个容器内运行多个应用进程。如果有需求,可以通过一些额外的进程管理机制,比如supervisord来管理所运行的进程。可以参考

https://docs.docker.com/articles/using_supervisord/


10、如何控制容器占用系统资源(CPU MEM)的份额?

在使用docker create命令创建容器或使用docker run创建并启动容器的时候,可以使用-c | –cpu-shares[=0] 参数来调整容器使用CPU的权重;使用 -m | –memory[=MEMORY]参数来调整容器使用内存的大小。

好了,觉得有用的朋友可以转发或者收藏,大家有问题可以在下面留言一起探讨,有更好的建议也可以在评论区贴出来!!!


本文转自甘兵 51CTO博客,原文链接:http://blog.51cto.com/ganbing/2052074,如需转载请自行联系原作者