Docker如何在/etc/resolv.conf中使用已定义的名称服务器启动容器

时间:2016-04-28 04:57:04

标签: linux docker dockerfile nameservers

这是我的Dockerfile

FROM javamachine_0.1.2
MAINTAINER Meiram
RUN /report/report.sh start
ENV LANG C.UTF-8 ENV LANGUAGE C.UTF-8 ENV LC_ALL C.UTF-8
RUN echo "nameserver 192.168.1.100" > /etc/resolv.conf
COPY resolv.conf /etc/resolv.conf
EXPOSE 9090

创建容器指令docker run -dns时也不要更改/etc/resolv.conf中的条目

如何永久更改/etc/resolv.conf中的条目?

4 个答案:

答案 0 :(得分:2)

如果您使用--dns,则可能需要删除这些行:

RUN echo "nameserver 192.168.1.100" > /etc/resolv.conf
COPY resolv.conf /etc/resolv.conf

另外,

尝试交换行.COPY命令将覆盖前一行。

答案 1 :(得分:1)

我找到了答案

当您需要使用默认网络设置(172.0.0.x)

创建容器时

- dns 正在运行。 但不适用于用户定义的网络--net some_name_of_your_network

因此,如果您需要创建容器,可以在/ etc / hosts

中定义主机名

使用此命令

docker run --net my_net --ip 192.168.1.x --add-host webserver:192.168.1.100 --add-host mysqlserver:192.168.1.x -td someimage

但这个解决方案对我来说是不可接受的。因为我需要编辑/etc/resolv.conf

答案 2 :(得分:1)

有关详细信息,请参阅https://docs.docker.com/engine/userguide/networking/default_network/configure-dns/

您希望将以下内容添加到docker命令行,而不是所有--add-host选项(假设您的主机可以通过dns解析)

--dns=192.168.1.100

基于您运行多个服务的事实,如果您的Web服务器和mysqlserver也是docker容器,您可能希望通过docker-compose配置容器集合。有关详细信息,请参阅https://docs.docker.com/compose/overview/

答案 3 :(得分:1)

如果你使用docker-compose,你可以在docker-compose.yml中简单地添加你的dns-server

  my-app:
     build: my-app
     dns:
       - 10.20.20.1  # dns server 1
       - 10.21.21.2  # dns server 2
     dns_search: ibm-edv.ibmnet.int

请参阅https://bitbucket.org/snippets/mountdiablo/9yKxG/docker-compose-reference-yaml-file-with