尝试在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
型
任何帮助都将不胜感激。
1条答案
按热度按时间dhxwm5r41#
您的问题是您实际上并没有运行Systemd中的
systemctl
(其中对exec
服务类型的支持早在2018年就引入了),而是使用了https://github.com/gdraheim/docker-systemctl-replacement提供的systemctl
命令,该命令不理解exec
服务类型(您可以在此处查看支持的类型列表)。使用这个 Package 器似乎没有什么意义:只需从服务文件中获取
ExecStart
命令,并将其设置为Dockerfile中的CMD
条目:您可以添加必要的
USER
、WORKDIR
等指令,以重现服务文件配置的环境。您可能需要更改
--listen
选项;在几乎所有情况下,绑定到容器内部的本地主机地址是没有意义的。看起来Greenbone项目提供了他们自己的Docker映像,沿着在容器化环境中运行东西的说明。