首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dockerfile: bind9:无法识别的服务

Dockerfile: bind9:无法识别的服务
EN

Stack Overflow用户
提问于 2021-10-21 13:09:11
回答 1查看 354关注 0票数 0

我是docker的新手,我想用Ubuntu20.04和bind9服务安装来建立一个镜像。

下面是我的docker文件代码

代码语言:javascript
运行
复制
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     

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

CMD systemctl restart bind9

当我执行以下命令来构建镜像时,

代码语言:javascript
运行
复制
sudo docker image build --tag bind9server . 

它工作得很好。

代码语言:javascript
运行
复制
Step 6/6 : CMD systemctl restart bind9
 ---> Running in f982f314c216

但是当我运行这个docker镜像时,我得到了如下所示的错误

代码语言:javascript
运行
复制
ERROR:systemctl:Unit bind9.service could not be found.

在安装了Bind9之后,为什么上面的命令会出错?

错误只与Docker一起出现,如果我在Ubuntu 20.04的主机环境中运行相同的命令,那么它工作得很好。

EN

回答 1

Stack Overflow用户

发布于 2021-10-21 14:29:09

第一件事:你应该为你的最后一个CMD使用一个长时间运行的命令,否则一旦完成,容器就会退出。CMD的目的是为您的容器提供一个默认的入口点,因此即使存在bind9服务,您的容器也会立即退出。此外,只有最后一个命令行才会生效(参见docs)。

第二:关于为什么在this question容器中运行systemd不是一个好主意的解释,请参阅Docker。第一次尝试,即直接调用named,效果会好得多。

第三:在“普通”主机上,当您不确定单元名称时,例如bind9,您可以尝试使用systemctl list-units --all检查所有已知的单元。看起来您的服务名为named

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69662603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档