首页 > 解决方案 > 在 Dockerfile 中设置 bind9 时面临问题

问题描述

我是 docker 新手,我想用 Ubuntu 20.04 和 bind9 服务安装构建一个映像。

下面是我的docker文件代码

FROM ubuntu:20.04

ENV TZ=Asia
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update && apt-get install -y \
    apt-utils \
    systemctl \
    bind9     

RUN /usr/sbin/named -g -c /etc/bind/named.conf -u bind

RUN systemctl restart bind9

我收到如下错误

ERROR:systemctl:Unit bind9.service could not be found.

安装 Bind9 后,任何人都可以帮助我,为什么上面的命令会出错?

错误仅与 Docker 一起出现,如果我在 Ubuntu 20.04 的主机环境中运行相同的命令,那么它可以正常工作。

标签: dockershellubuntu

解决方案


您通常不能在容器中使用服务管理命令(如serviceorsystemctl等​​),因为没有运行服务管理器。

此外,即使有一个服务管理器正在运行,在命令中与之交互也没有任何意义RUN:这些命令是映像构建过程的一部分,此时没有持久服务在运行。命令在一个RUN孤立的环境中运行,该环境在命令完成时被完全拆除RUN

如果要bind在使用映像运行容器时启动,则需要将适当的bind命令行放入CMD选项中。比如官方的bind9镜像包括:

CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf", "-u", "bind"]

(有关详细信息,请参阅Dockerfile


推荐阅读