我有以下简化的docker-compose文件:
version: '2' services: test.base: container_name: test.base image: docker.pnet.ch/r-base:latest restart: on-failure networks: - mynet dns: 192.168.198.2 dns_search: - pext.ch - pnet.ch networks: mynet: driver: bridge driver_opts: com.docker.network.enable_ipv4: "true" ipam: driver: default config: - subnet: 192.168.198.0/24 gateway: 192.168.198.1
有了这个,我希望在容器/etc/resolv.conf中有以下条目:
search pext.ch pnet.ch nameserver 192.168.198.2
但我有以下内容:
search pext.ch pnet.ch nameserver 127.0.0.11 options ndots:0
当我使用docker run使用--dns 192.168.199.2手动启动容器时/etc/resolv.conf包含一个带有给定ip地址的名称服务器。
我的docker-compose文件有什么问题,还是docker-compose中的错误?
我在RHEL和Docker-compose 1.9.0上使用docker版本1.10.3
答案 0 :(得分:4)
Docker中的网络编写文件格式v2它是different from version 1,我认为这是实际问题。令人困惑的是docker run ...
命令有效,而docker-compose ...
则没有。我遇到了同样的问题。
我发现Docker Compose v2为docker-compose.yml
文件中定义的容器创建用户定义的网络,而docker run ...
默认使用桥接网络,在主机上命名为docker0
。此外,对于自定义网络,docker使用embedded DNS server(即127.0.0.11
)。文档说:
如果嵌入式DNS服务器无法解析容器中的名称解析请求,嵌入式DNS服务器将使用通过
--dns
选项传递的IP地址转发DNS查询。这些--dns
IP地址由嵌入式DNS服务器管理,不会在容器的/etc/resolv.conf
文件中更新。
我认为最后一行回答了你的问题。无论如何,你的容器应该正确解析,不是吗?
答案 1 :(得分:3)
我使用volumes:
解决了这个问题。在你的情况下:
version: '2'
services:
test.base:
container_name: test.base
image: docker.pnet.ch/r-base:latest
restart: on-failure
networks:
- mynet
volumes:
- ./resolv.conf:/etc/resolv.conf
./resolv.conf
文件包含您所期望的内容:
search pext.ch pnet.ch
nameserver 192.168.198.2
此处假设resolv.conf
文件与docker-compose文件位于同一文件夹中。
答案 2 :(得分:0)
如前所述,resolv.conf
出于某些特定原因并没有发生变化,因此我发现docker-compose
受到了骇人的攻击:在resolv.conf
期间就地更改了docker build
。
您应该在命令的开头进行文件更改,并保持不变直到结束。
赞:
RUN echo "nameserver 10.100.1.13" > /etc/resolv.conf && apt update
我知道这与良好的编码实践相去甚远,但我认为它比从外部世界安装/etc/resolf.conf
更为优雅。
答案 3 :(得分:0)
我正在运行此存储库中保存的ubuntu版本的docker(docker.io 18.06.0)。我使用apt-get install docker.io删除了该版本的install docker.io。所以现在我有了这个版本:
<?php if(($this->session->flashdata('name')=='Hello, I am Flash Data')){?>
<div class="alert alert-info alert-dismissible fade in" role="alert" id="flash_data"> //set your id here
<i class="glyphicon glyphicon-ok"></i> <?php echo $this->session->flashdata('notif'); ?>
</div>
<?php } ?>
以docker-compose运行的容器没有按预期配置的dns文件Client:
Version: 17.12.1-ce
API version: 1.35
Go version: go1.10.1
Git commit: 7390fc6
Built: Wed Apr 18 01:23:11 2018
OS/Arch: linux/amd64
Server:
Engine:
Version: 17.12.1-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.10.1
Git commit: 7390fc6
Built: Wed Feb 28 17:46:05 2018
OS/Arch: linux/amd64
Experimental: false
,但是每个容器都可以访问Internet。我认为变化解决了我的问题。