我是docker的新手,我想用Ubuntu20.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
CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf", "-u", "bind"]
CMD systemctl restart bind9
当我执行以下命令来构建镜像时,
sudo docker image build --tag bind9server .
它工作得很好。
Step 6/6 : CMD systemctl restart bind9
---> Running in f982f314c216
但是当我运行这个docker镜像时,我得到了如下所示的错误
ERROR:systemctl:Unit bind9.service could not be found.
在安装了Bind9之后,为什么上面的命令会出错?
错误只与Docker一起出现,如果我在Ubuntu 20.04的主机环境中运行相同的命令,那么它工作得很好。
发布于 2021-10-21 14:29:09
第一件事:你应该为你的最后一个CMD使用一个长时间运行的命令,否则一旦完成,容器就会退出。CMD的目的是为您的容器提供一个默认的入口点,因此即使存在bind9服务,您的容器也会立即退出。此外,只有最后一个命令行才会生效(参见docs)。
第二:关于为什么在this question容器中运行systemd
不是一个好主意的解释,请参阅Docker。第一次尝试,即直接调用named
,效果会好得多。
第三:在“普通”主机上,当您不确定单元名称时,例如bind9
,您可以尝试使用systemctl list-units --all
检查所有已知的单元。看起来您的服务名为named
。
https://stackoverflow.com/questions/69662603
复制相似问题