docker - 在 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 的主机环境中运行相同的命令,那么它可以正常工作。
解决方案
您通常不能在容器中使用服务管理命令(如service
orsystemctl
等),因为没有运行服务管理器。
此外,即使有一个服务管理器正在运行,在命令中与之交互也没有任何意义RUN
:这些命令是映像构建过程的一部分,此时没有持久服务在运行。命令在一个RUN
孤立的环境中运行,该环境在命令完成时被完全拆除RUN
。
如果要bind
在使用映像运行容器时启动,则需要将适当的bind
命令行放入CMD
选项中。比如官方的bind9镜像包括:
CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf", "-u", "bind"]
(有关详细信息,请参阅Dockerfile)
推荐阅读
- android - 无法使用“google_maps_flutter”插件在 Flutter 中显示当前用户位置
- r - 如何使用 Tidymodels 中的更新功能更新调整参数值
- python - Reshape a pandas Series
- sql - 锯齿模式局部最大值的每日总计
- javascript - 函数`this`在nodejs的模块中不起作用
- c - 解决 valgrind“可能丢失”的内存泄漏
- macos - 终端 Mac OS 显示 A^[[C^[[C^[[B^[[D 当按箭头键盘
- python - 在 python 中使用基本递归绘制分形时出错
- c# - JsonConvertDeserializeObject 无法正常工作
- javascript - 如何从 BigInt 计算百分比?