我试图构建一个包含外部文件的docker容器



我试图创建一个带有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"]

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最明显的效果是防止对命名目录的后续更改;以后不需要装入卷。(

如果从Dockerfile中删除VOLUME行,那么运行完全没有-v选项的容器也应该有效。(但如果你在不同的设置上有不同的DNS配置,这可能不是你想要的。(

-v config:/etc/bind

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

-v "$(pwd)/config:/etc/bind"

相关内容

  • 没有找到相关文章

最新更新