我的主机系统是Arch Linux,而经过我自己修改的Docker镜像是“base / arch”(archlinux)。 Unbound已安装在已提交的镜像上,但是我不知道如何在运行服务的情况下启动容器,因为SystemD不能在Docker中运行。
我如何在Unbound作为服务运行时实际启动容器?
我已经看过一些基本的教程,但是其中大多数教程介绍了如何启动预构建的容器:
Dockers basic course.
Arch Wiki.
Digital Ocean overview.
谢谢!
最佳答案
对于此答案,我假设您已经通过pacman安装了community/unbound
软件包而安装了Unbound。
您可以检查与软件包一起安装的systemd单元文件,以确定如何实际启动服务器。看看/usr/lib/systemd/system/unbound.service
:
[Unit]
Description=Unbound DNS Resolver
After=network.target
[Service]
ExecStartPre=/bin/cp -f /etc/trusted-key.key /etc/unbound/
PIDFile=/run/unbound.pid
ExecStart=/usr/bin/unbound -d
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
最重要的是
ExecStart
行。这描述了systemd用于实际启动服务的命令。根据unbound
的帮助(unbound -h
),-d
切换意味着不要在后台进行 fork (这是一件好事,因为这也是在Docker contaier中启动Unbound的确切条件)。生成图像时,
ExecStartPre
命令可以是一个简单的RUN
步骤。总之,您可以将其转换为类似于以下内容的Dockerfile:
FROM base/arch
# <omitted>
RUN /bin/cp -f /etc/trusted-key.key /etc/unbound/
CMD ["/usr/bin/unbound", "-d"]