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

我的主机系统是Arch Linux,Docker映像是“base / arch”(archlinux),并有我自己的修改。 Unbound被安装在一个提交的镜像上,但是我不知道如何启动运行该服务的容器,因为SystemD并不打算在Docker中运行。

我如何真正启动容器作为一个服务作为Unbound运行?

我已经通过一些基本的教程,但其中大部分包括启动预build容器:

Dockers基础课程。

Arch Wiki。

数字海洋概述。

谢谢!

对于这个答案,我假设你已经安装Unbound,只需通过pacman安装community/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 Contaier中启动Unbound所需的内容)。

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

总之,你可以把它翻译成一个类似如下的Dockerfile:

 FROM base/arch # <omitted> RUN /bin/cp -f /etc/trusted-key.key /etc/unbound/ CMD ["/usr/bin/unbound", "-d"]