I try to create a docker container with bind9 on it and I want to add my db.personal-domain.com file but when I run docker build
and then docker run -tdp 53:53 -v config:/etc/bind <image id>
the container doesn't have my db.personal-domain.com file. How to fix that ? Thanks !
tree structure
-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"]
There is a syntax issue in your docker run -v
option. If you use docker run -v name:/container/path
(even if name
matches a local file or directory) it mounts a named volume over your configuration directory. You want the host content, and you need -v /absolute/host/path:/container/path
syntax (the host path must start with /
). So (on Linux/MacOS):
docker run -d -p 53:53 \
-v "$PWD:config:/etc/bind" \
my/bind-image
In your image you're trying to COPY
in the config file. This could work also; but it's being hidden by the volume mount, and also rendered ineffective by the VOLUME
statement. (The most obvious effect of VOLUME
is to prevent subsequent changes to the named directory; it's not required to mount a volume later.)
If you delete the VOLUME
line from the Dockerfile, it should also work to run the container without the -v
option at all. (But if you'll have different DNS configuration on different setups, this probably isn't what you want.)