Skip to content

Instantly share code, notes, and snippets.

@amowu
Created March 25, 2017 12:19
Show Gist options
  • Select an option

  • Save amowu/8948f3f9b4fe44591e794e31b1ecf458 to your computer and use it in GitHub Desktop.

Select an option

Save amowu/8948f3f9b4fe44591e794e31b1ecf458 to your computer and use it in GitHub Desktop.
15 个 Docker 技巧和提示

将 docker ps 输出通过管道重定向到 less -S,避免折行:

$ docker ps -a | less -S

docker logs 默认情况下不会观察日志,除非你使用 -f 参数:

$ docker logs <containerid> -f

docker inspect 默认输出大量的 JSON,可以通过 jq 提取需要的那些值:

# list IP addresses for all containers connected to 'bridge' network
docker network inspect bridge -f '{{json .Containers}}' | jq '.[] | {cont: .Name, ip: .IPv4Address}

也可以像下面这样在 docker inspect 中使用内置的模板:

# is the last run container still running?
docker inspect --format '{{.State.Running}}' $(docker ps -lq)

prune 是个非常有用的命令(可在 vaume 和 network 子命令中使用),但它从 Docker 1.13 开始才有。如果你使用旧的 Docker 版本,下面的命令可用于代替 prune 命令。

$ docker system prune

悬空卷是不被任何容器使用的卷。若要移除它们,需要结合两个命令:首先列出悬空卷的 ID 然后移除它们。

docker volume rm $(docker volume ls -q -f "dangling=true")

这个操作与上面的步骤相同。首先列出要删除(通过过滤)的容器(仅 ID)然后删除它们(参考 rm -f 强制删除)。

$ docker rm $(docker ps -q -f "status=exited")

悬空映像是未标记的映像,它们是映像树的叶节点(不是中间层)。

docker rmi $(docker images -q -f "dangling=true")

docker run 接收明确的端口映射参数,你也可以使用 -P 来自动映射所有端口。后者的优势在于可以防止冲突, 可以通过下面的命令查找已经分配的端口:

docker port <containerId> <portNumber>
#
docker inspect --format '{{.NetworkSettings.Ports}}' <containerId>

每个容器在私有子网中都有自己的 IP (默认是 172.17.0.0/16)。重启可以改变 IP,如果你需要,可以查询:

docker inspect --format '{{.NetworkSettings.IPAddress}}' <containerId>

配置重启策略为总是重启,这样一但容器退出,Docker 就会重启它

docker run --restart=always my_image

配置重启策略为失败时重启,最大重启尝试次数为 10。

docker run --restart=on-failure:10 my_image

https://www.oschina.net/translate/docker-hacks-tips

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment