Systemctl无法在Docker中启动服务,因为其服务执行类型

k2fxgqgv  于 2022-12-18  发布在  Docker
关注(0)|答案(1)|浏览(396)

尝试在Docker容器中启动gsad服务时,收到以下错误:

root@7146c6073ae5:/# systemctl start gsad.service                          
ERROR:systemctl: gsad.service: Failed to parse service type, ignoring: exec
ERROR:systemctl:unsupported run type 'exec'

下面是基于原始文档的原始/etc/systemd/system/gsad.service文件:

[Unit]
Description=Greenbone Security Assistant daemon (gsad)
Documentation=man:gsad(8) https://www.greenbone.net
After=network.target gvmd.service
Wants=gvmd.service

[Service]
Type=exec
User=gvm
Group=gvm
RuntimeDirectory=gsad
RuntimeDirectoryMode=2775
PIDFile=/run/gsad/gsad.pid
ExecStart=/usr/local/sbin/gsad --foreground --listen=127.0.0.1 --port=9392 --http-only
Restart=always
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target
Alias=greenbone-security-assistant.service

我的Dockerfile的基础映像是ubuntu:latest,我已经使用这篇文章的源代码构建了openvas。
虽然我不确定这是否是导致错误的原因,但我一开始就通过在Dockerfile中执行以下操作收到了systemctl

git clone https://github.com/gdraheim/docker-systemctl-replacement /opt/systemctl-github && \
  ln -s /opt/systemctl-github/files/docker/systemctl3.py /usr/bin/systemctl


任何帮助都将不胜感激。

dhxwm5r4

dhxwm5r41#

您的问题是您实际上并没有运行Systemd中的systemctl(其中对exec服务类型的支持早在2018年就引入了),而是使用了https://github.com/gdraheim/docker-systemctl-replacement提供的systemctl命令,该命令不理解exec服务类型(您可以在此处查看支持的类型列表)。
使用这个 Package 器似乎没有什么意义:只需从服务文件中获取ExecStart命令,并将其设置为Dockerfile中的CMD条目:

FROM ubuntu:latest

.
.
.

CMD /usr/local/sbin/gsad --foreground --listen=127.0.0.1 --port=9392 --http-only

您可以添加必要的USERWORKDIR等指令,以重现服务文件配置的环境。
您可能需要更改--listen选项;在几乎所有情况下,绑定到容器内部的本地主机地址是没有意义的。
看起来Greenbone项目提供了他们自己的Docker映像,沿着在容器化环境中运行东西的说明。

相关问题