在搭建 Drone CI 服务的时候,拉取git代码出现了网络不通。
+ git init
Initialized empty Git repository in /drone/src/testgit.com/root/demo1/.git/
+ git remote add origin http://testgit.com:10080/root/demo1.git
+ git fetch --no-tags origin +refs/heads/master:
fatal: unable to access 'http://testgit.com:10080/root/demo1.git/': Couldn't resolve host 'testgit.com'
exit status 128
也是到 Drone 的论坛问了 http://discourse.drone.io/t/help-git-clone-with-custom-extra-hosts/217。 看来需要自己设置网络问题,没有办法通过 docker-compose.yml 文件来进行设置。
普通的 Docker 容器解决方案
在 docker-compose.yml 中增加 extra_hosts
关键字就可以将数据写入到容器的 /etc/hosts
。
version: '2' services: drone-server: image: drone/drone:latest ports: - 8100:8000 extra_hosts: - "mygit.com:10.123.123.130" volumes: - ./drone:/var/lib/drone/ restart: always environment: - DRONE_OPEN=true - DRONE_DEBUG=true
Drone CI 的情况
Drone CI
这个情况比较麻烦。是在Drone agent容器里面又启动了一个容器,这个时候没有关于extra_hosts
设置给子容器。于是子容器无法访问特定的域名。
修改 hosts 文件失败
本来想设置添加一个 hosts 文件到镜像中的。但是发现一只失败,无法写入成功。
FROM plugins/git
ADD ./hosts /etc/
RUN cat /etc/hosts
不过这条路走失败了。
hosts文件其实并不是存储在Docker镜像中的,
/etc/hosts
,/etc/resolv.conf
和/etc/hostname
,是存在/var/lib/docker/containers/(docker_id)目录下,容器启动时是通过mount将这些文件挂载到容器内部的。因此如果在容器中修改这些文件,修改部分不会存在于容器的top layer,而是直接写入这3个文件中。容器重启后修改内容不存在的原因是每次Docker在启动容器的时候,Docker每次创建新容器时,会根据当前docker0下的所有节点的IP信息重新建立hosts文件。也就是说,你的修改会被Docker给自动覆盖掉。摘录自:https://wongxingjun.github.io/2016/04/06/Docker%E4%BF%AE%E6%94%B9hosts/
问了同事,一般很多容器的做法是,通过将hosts 文件写入容器,然后在容器启动后, cat /data/hosts > /etc/hosts
到,然后再执行命令。
我觉得这个方法不适合我,因此我重新寻找新的方法。后面找到了利用 DNS 服务来规避。
搭建 dnsmaq DNS 服务
将需要配置的 hosts 写入到 /etc/hosts
中。
在虚拟机或者特定服务安装 dnsmaq 服务。
yum install dnsmasq -y touch /etc/dnsmasq.hosts # 重启 service dnsmasq restart # 测试一下是否可以查询到域名 dig @127.0.0.1 testdomain.com
使用 Docker 的 DNS 解决
vim /etc/docker/daemon.json
{
"dns": ["10.123.12.14", "8.8.8.8"]
}
将刚刚的 DNS 服务器 IP 写入到配置中,追加一个字段 dns
。如果还有其他的 DNS 服务器,那么就写入在数组中写入其他的 IP。
重启一下 Docker 服务。
service docker restart
Docker 容器测试网络
这个是我的容器
docker run --rm -e DRONE_REMOTE_URL=http://mydomain.com:10080/root/demo1.git plugins/git
或者
docker run busybox nslookup google.com
参考文章
- https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
- http://www.winseliu.com/blog/2014/10/18/modify-hosts-build-hadoop-cluster-on-docker/
声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客
近期评论