0

我尝试创建一个带有 bind9 的 docker 容器,我想添加我的 db.personal-domain.com 文件,但是当我运行时docker builddocker run -tdp 53:53 -v config:/etc/bind <image id>容器没有我的 db.personal-domain.com 文件。如何解决?谢谢 !

树状结构

-DNS
--Dockerfile
--config
---db.personal-domain.com

Dockerfile

FROM ubuntu:20.04

RUN apt-get update
RUN apt-get install -y bind9
RUN apt-get install -y bind9utils

WORKDIR /etc/bind
VOLUME ["/etc/bind"]

COPY config/db.personal-domain.com /etc/bind/db.personal-domain.com


EXPOSE 53/tcp

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

2 回答 2

1
-v config:/etc/bind

该语法创建了一个命名卷,称为config. 看起来您希望主机卷指向当前目录中的路径,为此您需要包含带有前导斜杠的完全限定路径,例如$(pwd)用于生成路径:

-v "$(pwd)/config:/etc/bind"
于 2021-04-25T12:12:23.200 回答
1

docker run -v您的选项存在语法问题。如果您使用docker run -v name:/container/path(即使name匹配本地文件或目录),它会在您的配置目录上安装一个命名卷。您需要主机内容,并且需要-v /absolute/host/path:/container/path语法(主机路径必须以 开头/)。所以(在 ​​Linux/MacOS 上):

docker run -d -p 53:53 \
  -v "$PWD:config:/etc/bind" \
  my/bind-image

在您的图像中,您试图COPY在配置文件中。这也可以工作;但它被卷安装隐藏,并且也被声明无效VOLUME。(最明显的效果VOLUME是防止对命名目录的后续更改;以后不需要挂载卷。)

如果您VOLUME从 Dockerfile 中删除该行,它也应该可以在没有-v选项的情况下运行容器。(但如果您在不同的设置上有不同的 DNS 配置,这可能不是您想要的。)

于 2021-04-25T12:18:25.493 回答