我尝试构建一个包含外部文件的 docker 容器
I try to build a docker container that include externals files
我尝试创建一个带有 bind9 的 docker 容器,我想添加我的 db.personal-domain.com 文件,但是当我 运行 docker build
然后 docker 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"]
-v config:/etc/bind
该语法创建了一个名为 config
的命名卷。看起来您想要一个指向当前目录中的路径的主机卷,为此您需要包含一个带有前导斜杠的完全限定路径,例如使用 $(pwd)
生成路径:
-v "$(pwd)/config:/etc/bind"
您的 docker run -v
选项中存在语法问题。如果您使用 docker run -v name:/container/path
(即使 name
匹配本地文件或目录),它会在您的配置目录上安装一个 named volume。您想要主机内容,并且需要 -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 配置,这可能不是您想要的。)
我尝试创建一个带有 bind9 的 docker 容器,我想添加我的 db.personal-domain.com 文件,但是当我 运行 docker build
然后 docker 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"]
-v config:/etc/bind
该语法创建了一个名为 config
的命名卷。看起来您想要一个指向当前目录中的路径的主机卷,为此您需要包含一个带有前导斜杠的完全限定路径,例如使用 $(pwd)
生成路径:
-v "$(pwd)/config:/etc/bind"
您的 docker run -v
选项中存在语法问题。如果您使用 docker run -v name:/container/path
(即使 name
匹配本地文件或目录),它会在您的配置目录上安装一个 named volume。您想要主机内容,并且需要 -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 配置,这可能不是您想要的。)