非常教程

Docker 17参考手册

引擎: 管理员指南 | Engine: Admin Guide

配置和运行Docker(引擎) | Configuring and running Docker (Engine)

在成功安装 Docker 并启动 Docker 之后,dockerd守护进程将以其默认配置运行。本主题将介绍如何自定义配置,手动启动守护程序以及如果遇到问题时对守护程序进行故障排除和调试。

使用操作系统实用程序启动守护进程(daemon

启动 Docker 的命令取决于您的操作系统。检查安装 Docker 下的正确页面。要将 Docker 配置为在系统引导时自动启动,请参阅将 Docker 配置为在引导时启动。

手动启动守护程序(daemon

通常,您使用操作系统实用程序启动 Docker。出于调试目的,您可以使用该dockerd命令手动启动 Docker 。您可能需要使用sudo,具体取决于您的操作系统配置。当您以这种方式启动 Docker 时,它会在前台运行,并将其日志直接发送到您的终端。

$ dockerd

INFO[0000] +job init_networkdriver()
INFO[0000] +job serveapi(unix:///var/run/docker.sock)
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
...
...

要在您手动启动 Docker 时停止 Docker,请在您的终端中发出一个Ctrl+C

配置 Docker 守护进程

守护进程(daemon)包含许多配置选项,您可以在手动启动 Docker 时将其作为标志传递,或者在daemon.json配置文件中进行设置。推荐使用第二种方法,因为重新启动 Docker 时,这些配置更改仍然存在。

请参阅 dockerd 以获取完整的配置选项列表。

以下是使用一些配置选项手动启动 Docker 守护程序(daemon)的示例:

$ dockerd -D --tls=true --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem -H tcp://192.168.59.3:2376

此命令启用 debugging(-D),启用 TLS(-tls),指定服务器证书和密钥(--tlscert--tlskey),并指定守护程序侦听连接的网络接口(-H)。

更好的方法是将这些选项放入daemon.json文件并重新启动 Docker。此方法适用于每个 Docker 平台。以下daemon.json示例设置与上述命令相同的所有选项:

{
  "debug": true,
  "tls": true,
  "tlscert": "/var/docker/server.pem",
  "tlskey": "/var/docker/serverkey.pem",
  "hosts": ["tcp://192.168.59.3:2376"]
}

Docker 文档中会讨论许多特定的配置选项。接下来的一些地方包括:

  • 自动启动容器
  • 限制容器的资源
  • 配置存储驱动程序
  • 容器安全

排除守护进程(daemon)故障

您可以在守护进程上启用调试,以了解守护进程的运行时活动并帮助进行故障排除。如果守护进程完全没有响应,您还可以通过向 Docker 守护进程(daemon)发送SIGUSR信号来强制将所有线程的完整堆栈跟踪添加到守护进程日志中。

内存异常(OOME)

如果您的容器尝试使用比系统可用的内存更多的内存,则可能会遇到内存异常(OOME),并且容器或 Docker 守护程序(daemon)可能会被内核 OOM 切断器所切断。要防止发生这种情况,请确保您的应用程序在具有足够内存的主机上运行,​​并且请参阅了解耗尽内存的风险。

阅读日志

守护进程(daemon)日志可以帮助您诊断问题。根据操作系统配置和使用的日志记录子系统,日志可以保存在几个位置之一中:

操作系统

位置

RHEL, Oracle Linux

/var/log/messages

Debian

/var/log/daemon.log

Ubuntu 16.04+, CentOS

Use the command journalctl -u docker.service

Ubuntu 14.10-

/var/log/upstart/docker.log

macOS

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/console-ring

Windows

AppData\Local

启用调试

有两种方法来启用调试。推荐的方法是将debug密钥设置truedaemon.json文件中。此方法适用于每个 Docker 平台。

1. 编辑daemon.json通常位于/etc/docker/的文件。如果该文件尚不存在,您可能需要创建该文件。在 macOS 或 Windows 上,请勿直接编辑文件。相反,请转到首选项 / 守护进程 / 高级

2. 如果文件为空,请添加以下内容:

{ "debug": true }

如果该文件已经包含 JSON,只需添加该键"debug": true,如果它不是结束括号之前的最后一行,请注意在该行的末尾添加逗号。同时验证是否log-level已设置密钥,将其设置为infodebuginfo是默认的,和可能的值是debuginfowarnerrorfatal

3. HUP向守护程序发送信号以使其重新加载其配置。在 Linux 主机上,使用以下命令。

$ sudo kill -SIGHUP $(pidof dockerd)

在 Windows 主机上,重新启动 Docker。您可以停止 Docker 守护进程并使用该-D标志手动重新启动它。但是,这可能会导致 Docker 以与主机的启动脚本创建的环境不同的环境重新启动,并且这可能会使调试更加困难。强制要记录的堆栈跟踪如果守护进程没有响应,可以强制执行完整的堆栈跟踪通过向SIGUSR1守护进程发送信号进行记录。

  • Linux

$ sudo kill -SIGUSR1 $(pidof dockerd)

  • Windows 服务器

下载 docker-signal。

--pid=<PID of daemon>标志运行可执行文件。

这将强制堆栈跟踪被记录,但不会停止守护进程(Daemon)。如果守护进程日志记录到文件中,它将显示堆栈跟踪或包含堆栈跟踪的文件的路径。

守护进程(Daemon)将在处理完SIGUSR1信号并将堆栈跟踪转储到日志后继续运行。堆栈跟踪可用于确定守护进程内所有 goroutine 和线程的状态。

检查 Docker 是否正在运行

检查 Docker 是否运行的操作系统无关的方法是使用该docker info命令询问 Docker 。

您还可以使用操作系统实用程序(例如sudo systemctl is-active dockersudo status dockersudo service docker status),或者使用 Windows 实用程序检查服务状态。

最后,您可以dockerd使用类似于pstop的命令检入进程的进程列表。

docker, daemon, configuration, troubleshooting

引擎: 管理员指南 | Engine: Admin Guide相关

1.Amazon CloudWatch记录日志记录驱动程序(引擎) | Amazon CloudWatch logs logging driver (Engine)
2. 绑定挂载 | Bind mounts (Engine)
3.使用Prometheus(引擎)收集Docker指标 | Collect Docker metrics with Prometheus (Engine)
4.配置日志记录驱动程序 | Configuring logging drivers (Engine)
5.使用systemd控制和配置Docker(引擎) | Control and configure Docker with systemd (Engine)
6.ETW日志记录驱动程序(引擎) | ETW logging driver (Engine)
7.流利的日志驱动程序(引擎) | Fluentd logging driver (Engine)
8.格式化命令和日志输出(引擎) | Format command and log output (Engine)
9.Google Cloud日志记录驱动程序(引擎) | Google Cloud logging driver (Engine)
10.Graylog扩展格式(GELF)日志记录驱动程序(引擎) | Graylog Extended Format (GELF) logging driver (Engine)
11.Journald日志记录驱动程序(引擎) | Journald logging driver (Engine)
12.JSON文件日志记录驱动程序(引擎) | JSON File logging driver (Engine)
13.在守护进程停机期间保持容器处于活动状态(引擎) | Keep containers alive during daemon downtime (Engine)
14.限制容器的资源(引擎) | Limit a container's resources (Engine)
15.通过大使容器链接(引擎) | Link via an ambassador container (Engine)
16.记录驱动程序的日志标记(引擎) | Log tags for logging driver (Engine)
17.Logentries日志驱动程序(引擎) | Logentries logging driver (Engine)
18.PowerShell DSC用法(引擎) | PowerShell DSC usage (Engine)
19.修剪未使用的Docker对象(引擎) | Prune unused Docker objects (Engine)
20.在容器中运行多个服务(引擎) | Run multiple services in a container (Engine)
21.运行时指标(引擎) | Runtime metrics (Engine)
22.Splunk日志记录驱动程序(引擎) | Splunk logging driver (Engine)
23.自动启动容器(引擎) | Start containers automatically (Engine)
24.存储概述(引擎) | Storage overview (Engine)
25.Syslog日志记录驱动程序(引擎) | Syslog logging driver (Engine)
26.tmpfs mounts
27.解决卷问题(引擎) | Troubleshoot volume problems (Engine)
28.使用日志驱动程序插件(引擎) | Use a logging driver plugin (Engine)
29.使用Ansible(引擎) | Using Ansible (Engine)
30.使用Chef(引擎) | Using Chef (Engine)
31.使用Puppet(引擎) | Using Puppet (Engine)
32.查看容器的日志(引擎) | View a container's logs (Engine)
33.Volumes (Engine)
Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06