我想采用 systemd 覆盖方式让 dockerd 监听端口 2376。所以我遵循了这个指令。
另一方面,我想深入了解 systemd 以了解其幕后情况。所以我尝试通过以下命令检查 docker 的单元文件:
systemctl cat docker.service
从命令的输出结果来看,涉及到两个文件。
我相信第一个是 docker 的默认单元文件,第二个是我创建的。
我的问题是:两个文件都包含句子 -ExecStart=并且在第二个文件中包含两次,例如:
ExecStart=
ExecStart=/usr/bin/dockerd -H fd://
Run Code Online (Sandbox Code Playgroud)
ExecStart=在设置有意义的值之前是否有必要分配空ExecStart=/usr/bin/dockerd -H fd://?
我将这篇文章分为两个问题,另一个问题在这里。
lar*_*sks 23
当您将条目添加到覆盖文件时,它们默认会附加到任何现有条目。也就是说,如果您的服务example.service具有:
[Service]
EnvironmentFile=/etc/foo.env
Run Code Online (Sandbox Code Playgroud)
您可以/etc/systemd/system/example.service.d/override.conf
使用以下内容进行创建:
[Service]
EnvironmentFile=/etc/bar.env
Run Code Online (Sandbox Code Playgroud)
那么有效的配置是:
[Service]
EnvironmentFile=/etc/foo.env
EnvironmentFile=/etc/bar.env
Run Code Online (Sandbox Code Playgroud)
这对于许多指令来说都很好,但是一项服务只能有一个
ExecStart(除非它是一项Type-oneshot服务),所以如果您尝试创建一个如下所示的覆盖文件:
[Service]
ExecStart=/new/command/line
Run Code Online (Sandbox Code Playgroud)
这将失败并出现以下错误:
systemd: example.service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.
Run Code Online (Sandbox Code Playgroud)
通过指定一个空 ExecStart,您将“清除”所有以前的条目。所以如果你example.service有:
[Service]
ExecStart=/bin/foo
Run Code Online (Sandbox Code Playgroud)
然后您创建一个覆盖,例如:
[Service]
ExecStart=
ExecStart=/bin/bar
Run Code Online (Sandbox Code Playgroud)
有效的配置是:
[Service]
ExecStart=/bin/bar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5956 次 |
| 最近记录: |