用systemd控制Docker
预计阅读时间:5分钟
许多Linux发行版使用systemd启动Docker守护程序。本文档显示了一些有关如何自定义Docker设置的示例。
启动Docker守护程序
手动开始
安装Docker之后,您需要启动Docker守护程序。大多数Linux发行版都systemctl
用于启动服务。
$ sudo systemctl start docker
系统启动时自动启动
如果您希望Docker在启动时启动,请参阅“ 配置Docker在启动时启动”。
自定义Docker守护程序选项
有多种方法可以为Docker守护程序配置守护程序标志和环境变量。推荐的方法是使用与平台无关的
daemon.json
文件,/etc/docker/
默认情况下该文件位于Linux上。请参阅
守护程序配置文件。
您可以使用来配置几乎所有守护程序配置选项daemon.json
。以下示例配置了两个选项。无法使用daemon.json
机制配置的一件事是HTTP代理。
运行时目录和存储驱动程序
您可能需要通过将其移动到单独的分区来控制用于Docker映像,容器和卷的磁盘空间。
为此,请在daemon.json
文件中设置以下标志:
{
"data-root": "/mnt/docker-data",
"storage-driver": "overlay2"
}
HTTP / HTTPS代理
泊坞窗守护程序使用HTTP_PROXY
,HTTPS_PROXY
以及NO_PROXY
在其启动环境环境变量来配置HTTP或HTTPS代理的行为。您不能使用该daemon.json
文件配置这些环境变量。
本示例覆盖默认docker.service
文件。
如果在公司设置中位于HTTP或HTTPS代理服务器后面,则需要在Docker systemd服务文件中添加此配置。
无根模式的注意事项
在无根模式下运行Docker时,systemd配置文件的位置不同。在无根模式下运行时,Docker作为用户模式的系统服务启动,并使用存储在每个用户主目录中的文件
~/.config/systemd/user/docker.service.d/
。另外,systemctl
必须在没有sudo
和带有--user
标志的情况下执行。如果您以无根模式运行Docker,请选择下面的“无根模式”选项卡。
-
为docker服务创建一个systemd插入目录:
$ sudo mkdir -p /etc/systemd/system/docker.service.d
-
创建一个名为
/etc/systemd/system/docker.service.d/http-proxy.conf
添加HTTP_PROXY
环境变量的文件:[Service] Environment="HTTP_PROXY=http://proxy.example.com:80"
如果您位于HTTPS代理服务器后面,请设置
HTTPS_PROXY
环境变量:[Service] Environment="HTTPS_PROXY=https://proxy.example.com:443"
可以设置多个环境变量;设置非HTTPS和HTTPs代理;
[Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443"
-
如果您有需要联系而不需要代理的内部Docker注册表,则可以通过
NO_PROXY
环境变量指定它们。该
NO_PROXY
变量指定一个字符串,该字符串包含用逗号分隔的主机应排除在代理之外的值。您可以指定以下选项来排除主机:- IP地址前缀(
1.2.3.4
) - 域名或特殊的DNS标签(
*
) - 域名与该名称和所有子域匹配。以“。”开头的域名。仅匹配子域。例如,给定域
foo.example.com
和example.com
:example.com
匹配example.com
和foo.example.com
,以及.example.com
仅匹配foo.example.com
- 单个星号(
*
)表示不应该进行代理 - IP地址前缀(
1.2.3.4:80
)和域名(foo.example.com:80
)接受文字端口号
配置示例:
[Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
- IP地址前缀(
-
刷新更改并重新启动Docker
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
-
验证配置已加载并匹配您所做的更改,例如:
$ sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80 HTTPS_PROXY=https://proxy.example.com:443 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp
-
为docker服务创建一个systemd插入目录:
$ mkdir -p ~/.config/systemd/user/docker.service.d
-
创建一个名为
~/.config/systemd/user/docker.service.d/http-proxy.conf
添加HTTP_PROXY
环境变量的文件:[Service] Environment="HTTP_PROXY=http://proxy.example.com:80"
如果您位于HTTPS代理服务器后面,请设置
HTTPS_PROXY
环境变量:[Service] Environment="HTTPS_PROXY=https://proxy.example.com:443"
可以设置多个环境变量;设置非HTTPS和HTTPs代理;
[Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443"
-
如果您需要联系内部Docker注册表而不进行代理,则可以通过
NO_PROXY
环境变量指定它们。该
NO_PROXY
变量指定一个字符串,该字符串包含用逗号分隔的主机应排除在代理之外的值。您可以指定以下选项来排除主机:- IP地址前缀(
1.2.3.4
) - 域名或特殊的DNS标签(
*
) - 域名与该名称和所有子域匹配。以“。”开头的域名。仅匹配子域。例如,给定域
foo.example.com
和example.com
:example.com
匹配example.com
和foo.example.com
,以及.example.com
仅匹配foo.example.com
- 单个星号(
*
)表示不应该进行代理 - IP地址前缀(
1.2.3.4:80
)和域名(foo.example.com:80
)接受文字端口号
配置示例:
[Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
- IP地址前缀(
-
刷新更改并重新启动Docker
$ systemctl --user daemon-reload $ systemctl --user restart docker
-
验证配置已加载并匹配您所做的更改,例如:
$ systemctl --user show --property=Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80 HTTPS_PROXY=https://proxy.example.com:443 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp
配置Docker守护程序侦听连接的位置
请参阅 配置Docker守护程序在何处侦听连接。
手动创建systemd单位文件
当安装不带软件包的二进制文件时,您可能希望将Docker与systemd集成。为此,将两个单元文件(service
和socket
)从github存储库安装
到/etc/systemd/system
。