docker进程的配置和调试

翻译:https://docs.docker.com/config/daemon/

等成功安装和启动Docker之后,dockerd进程以默认配置运行。这个话题讲如何手动配置和启动dockerd进程,以及当你遇到问题时如何查找问题。

利用操作系统的工具启动进程

如果docker是典型安装,docker进程的通常由一个系统的实用程序启动,而不是由用户手动启动。这样就使当机器重启时,进程可以很容器的自动重启。

不同的操作系统启动docker的命令不同。查看Install Docker中的正确章节。如果想配置docker开机自启动,可以参考Configure Docker to start on boot

手动启动进程

如果你不想用系统工具管理你的docker进程,或者你想做什么测试,你可以手动用‘dockerd’命令启动它。根据你的系统配置,你可能需要用到sudo.当你用这个方式启动docker,你会在前端运行并且直接将log输出到终端。

配置docker进程

有两种方法去配置docker进程。

  • 用Json配置文件。推荐方法。因为这样可以使所有的配置都在一个地方。
  • 当启动dockerd时使用flags

你可以同时用这两种方法去配置和使用,但是不要同时使用这两种方法去配置同一个选项。如果你使用两种方法配置同一个选项,docker进程会报错。

当你在linux系统使用第一种方法时。你需要创建一个json文件‘/etc/docker/daemon.json’。在mac端则perference -> daemon -> advanced.

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

当你使用这个配置,你的docker进程以debug模式运行,使用TLS,并监听流量192.168.59.3的2376端口。更多配置可参照dockerd reference docs

你也可以手动启动docker进程并用其flags配置,这对定位问题非常有用。如果我们想用和以上配置相同的方法去手动启动docker进程,则可以参照以下方法。

dockerd --debug \
  --tls=true \
  --tlscert=/var/docker/server.pem \
  --tlskey=/var/docker/serverkey.pem \
  --host tcp://192.168.59.3:2376

你以可以通过查看 dockerd reference docs获取更多配置信息,或者运行以下指令:

dockerd --help

我们还有其他一些专门的配置选项在docker的其他文件中被讨论。这些文件连接如下:

docker进程目录

docker进程将所有数据保存在一个目录下。所有和docker相关的,包括containers, images, volumes, service definition, 以及secrets都在其中。这个目录默认为‘/var/lib/docker’

你使用‘data-root’配置选项可以将其配置到其他的目录。由于docker进程的状态在这个目录被保持,所以,确保你每个进程都用一个专门的目录。如果两个进程分享同一个目录,例如,一个nfs分享,当你遇到困难时,你就很难的去定位问题。

定位daemon的问题

你可以打开进程的debug功能去获取进程的实时状态,去辅助定位问题。

定位daemon.json和启动脚本的冲突问题

如果你同时使用多种方法(daemon.json, flags或者start-up脚本)去受到启动dockerd进程时,当这些选项冲突时,docker就会启动失败并伴随如下一个错误

unable to configure the Docker daemon with file /etc/docker/daemon.json:
the following directives are specified both as a flag and in the configuration
file: hosts: (from flag: [unix:///var/run/docker.sock], from file: [tcp://127.0.0.1:2376])

如果你看到一个和这个错误非常相似的错误, 你可以调整你的flags或者daemon.json去避免冲突。针对示例中这个具体问题, 可以参考next section去解决。

如果你启动docker时用的是系统的启动脚本,你可能需要覆盖脚本中的一些符合你操作系统的默认配置

在daemon.json中使用hosts key

一个有名的比较难定位的配置冲突的例子就是当你想docker默认监听的进程地址切换成另一个时。docker默认会监听一个socket。在Debian或者欧版图系统上,如果你使用systemd,默认会有一个‘-H’,这个情况下,如果你指定一个hosts entry在daemon.json中,这就会导致一个配置冲突,然后docker无法启动。

去解决这个问题,创建这个问题则需要新创建一个文件‘/etc/systemd/system/docker.service.d/docker.conf’, 并在其中填写如下内容去移除掉默认的'-H'

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

有时,你还需要做一些启动配置去配置docker的systemd,例如configuring a HTTP or HTTPS proxy. 当你更改了其配置,你需要daemon-reload,然后在启动docker。遗憾的是,mac和windows不支持更改监听的hosts。

OOM异常

如果你的容器尝试用系统所能提供的更多的内存,则你会遇到OOME一场,且container和docker进程,可能会被kernel的OOM killer会kill掉。为了避免这个发生,确保你的应用有足够的内存。参见Understand the risks of running out of memory

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值