我的主机系统是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"]

08-17 11:06