Docker 未绑定的 DNS 服务器:如何作为服务启动

Docker Unbound DNS Server: How to launch as service

我的主机系统是 Arch Linux,Docker 映像是 "base/arch" (archlinux),并经过我自己的修改。 Unbound 安装在已提交的映像上,但我不太清楚如何使用 运行ning 服务启动容器,因为 SystemD 并不意味着 运行 in Docker。

我如何实际启动带有 Unbound 运行ning 作为服务的容器?

我已经学习了一些基本教程,但其中大部分都涉及启动预构建容器:

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 开关意味着 不要进入后台 (这是一件好事,因为那是也正是您在 Docker 容器中启动 Unbound 所需要的。

构建图像时,ExecStartPre 命令可以是一个简单的 RUN 步骤。

总而言之,您可以将其翻译成类似于这样的 Docker 文件:

FROM base/arch

# <omitted>

RUN /bin/cp -f /etc/trusted-key.key /etc/unbound/
CMD ["/usr/bin/unbound", "-d"]