You may want to add my wechat public account or add my technical blog's RSS feed

This list is meant to record some useful docker commands, it can help docker beginners to solve the problems they met. I'll try to keep this list current and up to date. Please leave your comments if you want to share some useful docker related commands.

How to inspect/debug a failed docker build

Tail the logs of a running container

SSH into a running container

Change the working dir

Container's port is unaccessible from outsider host

No such host

Remove the old-dated images

Automatically remove the container when it exits

Update 2017-3-25:

Copy file to or from a running container

Update 2017-4-3:

Clean up your docker system

Update 2017-4-8:

Display container resource usage statistics

Update 2017-5-18:

Clear container logs

Find the log location for a container

How to inspect/debug a failed docker build

After docker successfully executes a RUN command from a Dockerfile, a new layer in the image filesystem is committed. Conveniently you can use those layers's ids as images to start a new container. So when one of the Dockerfile command fails, what you need to do is to look for the id of the preceding layer and run a shell in a container created from that id:

docker run --rm -it <id_last_working_layer> bash -il

Once in the container, you can try the command failed to reproduce the issue, fix and test it. Finally update your Dockerfile with the fixed command.

But what if the failed command takes several hours? Rewinding prior to the failed command and running it again will be frustrating. The solution is running into the container in which the command failed.

First, find the container that failed:

docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6934ada98de6 42e0228751b3 "/bin/sh -c './utils/" 24 minutes ago Exited (1) About a minute ago sleepy_bell

Second, commit it to an image:

$ docker commit 6934ada98de6
sha256:7015687976a478e0e94b60fa496d319cdf4ec847bcd612aecf869a72336e6b83

And then run the image [if necessary, running bash]:

$ docker run -it 7015687976a4 bash -il

Now you are actually looking at the state of the build at the time that it failed, instead of at the time before running the command that caused the failure.

Tail the logs of a running container

	docker logs -f container-id

If the container has too much logs, you can use --tail number to specify number of lines to show from the end of the logs

SSH into a running container

	sudo docker exec -it container-id /bin/bash

-i, --interactive, Keep STDIN open even if not attached

-t, --tty Allocate a pseudo-TTY

NOTE:

docker attach will let you connect to your Docker container, but this isn't really the same thing as ssh. If your container is running a web server, for example, docker attach will probably connect you the stdout of the web service process

Change the working dir

RUN cd /tmp doesn't have any effect on the next instruction, use WORKDIR /tmp instead, the Docker daemon runs instruction in the Dockerfile one-by-one, committing the result of each instruction to a new image if necessary, so RUN cd /tmp will not have any effect on the next instructions.

Container's port is unaccessible from outsider host

Already EXPOSE port on Dockerfile, but port is unaccessible from outsider host.

The EXPOSE instruction informs Docker that the container listens on the specified network ports at run time. EXPOSE does not make the ports of the container accessible to the host. To do that, you must use either the -p flag to publish a range of ports or the -P flag to publish all of the exposed ports.

No such host

This error occurred:

dial tcp: lookup auth.docker.io on 10.0.2.3:53: no such host

You can solve this by add DNS server

	docker-machine ssh
echo "nameserver 8.8.8.8" > /etc/resolv.conf

Remove the old-dated images

Images will take disk spaces, you may want to remove the old dated images:

docker images | grep "weeks" | awk '{print $3}' | xargs --no-run-if-empty docker rmi

I think you can think up the command to remove all untagged images

Automatically remove the container when it exits

The containers that are not running are not taking any system resources besides disk space. It is usually good to clean up the container when the container exits:

docker run --rm ubuntu:14.04
--rm  Automatically remove the container when it exits

Too many open files

Change the max open files then restart docker service

ulimit -a
ulimit -n 100000 #change max open files

Debug an stopped container

docker start -ai container-id

-a, --attach=false

-i, --interactive=false

Copy file to or from a running container

Copy file from a running container

docker cp container:src_path dest_path

Copy file to a running container

docker cp src_path container:dest_path

Clean up your docker system

Show docker disk usage:

docker system df

Remove unused data:

docker system prune

Display container resource usage statistics

Display a live stream of continer(s) resource(CPU/Memory/IO) usage statistics

$ docker stats

Clear container logs

$ docker logs -c (clear) <container>

Find the log location for a container

$ docker inspect --format='{{.LogPath}}' $INSTANCE_ID

Other Resources You Should Know

Dockerfile best practices

useful commands for docker beginner的更多相关文章

  1. Common-used commands in Docker

    1. Start running a image in background mode docker run -it -d <image>:<tag> e.g. docker ...

  2. docker官方文档学习-1-Docker for mac安装配置

    https://docs.docker.com/docker-for-mac/ Get started with Docker for Mac 首先像在本博客docker-1-环境安装及例子实践处将环 ...

  3. 【云计算】docker的小知识,帮你更深入理解容器技术

    关于docker的15个小tip   1. 获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu): $ ID=$(docker run ubuntu e ...

  4. docker note

    docker --bip="10.1.42.1/16" -d 挂载宿主机目录 Docker支持挂载宿主机目录,支持宿主机目录和容器之间文件目录进行映射,彼此共享: docker r ...

  5. (转)关于docker的15个小tip

    转自:https://www.cnblogs.com/elnino/p/3899136.html 1. 获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubunt ...

  6. Get started with Docker for Windows

    Welcome to Docker for Windows! Docker is a full development platform for creating containerized apps ...

  7. Docker:Deploy your app

    Prerequisites Install Docker. Get Docker Compose as described in Part 3 prerequisites. Get Docker Ma ...

  8. Docker GitHub 网站中 Readme.md 以技术者的角度翻译

    Docker 是一个开源的轻量级容器项目,用于让你的应用在它上面打包.集装和运行.Docker 运行的环境既包含未知硬件也包含未知操作系统.这句话的意思是它可以运行在任何地方,小到你的笔记本大到一个大 ...

  9. CentOS7系列--5.2CentOS7中配置和管理Docker

    CentOS7配置和管理Docker Docker是操作系统级别的虚拟化工具,它能自动化布署在容器中的应用 1. 安装Docker 1.1. 安装Docker相关软件 [root@server1 ~] ...

随机推荐

  1. 分布式锁1 Java常用技术方案

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...

  2. InnoDB体系结构学习笔记

    后台线程 Master Thread 核心的后台线程,主要负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括(脏页的刷新).合并插入缓冲.(UNDO页的回收)等 IO Thread 4个writ ...

  3. 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断

    概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...

  4. [.NET] C# 知识回顾 - 事件入门

    C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...

  5. VS项目中使用Nuget还原包后编译生产还一直报错?

    Nuget官网下载Nuget项目包的命令地址:https://www.nuget.org/packages 今天就遇到一个比较奇葩的问题,折腾了很久终于搞定了: 问题是这样的:我的解决方案原本是好好的 ...

  6. npm源切换

    版权声明:欢迎转载,请附加转载来源:一路博客(http://www.16boke.com)   目录(?)[+] 安装 使用 列出可选的源 切换 增加源 删除源 测试速度 许可 项目主页   我们介绍 ...

  7. nginx代理https站点(亲测)

    nginx代理https站点(亲测) 首先,我相信大家已经搞定了nginx正常代理http站点的方法,下面重点介绍代理https站点的配置方法,以及注意事项,因为目前大部分站点有转换https的需要所 ...

  8. 支付宝web支付

    过程 1. 用户下单 2. 商户后台产生订单 3. 请求支付宝web支付页面(将订单信息返回给用户---放在form里面---隐藏起来-----并通过脚本自动提交此form到支付宝web支付页) 4. ...

  9. JS or C#?不存在的脚本之争

    前言: 又来到了周末,小匹夫也终于有了喘口气写写博客的时间和精力.话说周五的下午,小匹夫偶然间晃了一眼蛮牛的QQ群,又看到了一个Unity3D开发中老生长谈的问题,“我的开发语言究竟是选择JavaSc ...

  10. CentOS7 安装Mono及Jexus

    CentOS7安装Mono及Juxes 1 安装Mono 1.1 安装yum-utils 因为安装要用到yum-config-manager,默认是没有安装的,所以要先安装yum-utils包.命令如 ...