如何在Drone Docker插件

时间:2017-07-25 14:47:16

标签: docker dns continuous-integration continuous-deployment drone

我在公司代理服务器后面使用Drone。 当我在那里构建Docker容器时,Docker会将正确的搜索服务器以及DNS地址插入到容器/etc/resolv.conf中。但是,使用Docker plugin时,只会修改搜索服务器,而名称服务器会设置为默认的Google名称服务器(8.8.8.88.8.4.4)。

这显然会破坏我的构建,因为我的公司代理DNS地址无法解析为其关联的IP地址。

这种行为是否有意和/或是否有允许我通过我的代理连接到互联网的解决方法?

1 个答案:

答案 0 :(得分:3)

这可以通过为docker插件配置提供DNS服务器地址来解决。请注意,下面的示例使用虚拟IP地址;请替换为您的实际IP地址。

pipeline:
  docker:
    image: plugins/docker
    custom_dns: [ 10.10.0.1, 10.10.0.2 ]

如果您使用的是企业版,则可以配置以下全局环境变量:

- name: PLUGIN_CUSTOM_DNS
  value: 10.10.0.1,10.10.0.2


为什么这有必要?

为什么这个问题出现在某些配置而非其他配置?在这些情况下,为什么DNS配置不会传播到Docker中的Docker?为什么这适用于默认网桥而不是用户定义的网络?不幸的是,我目前无法提供根本原因,但可以提供一些可能解释行为的信息......

根据您的Docker版本,主机配置等,配置DNS的逻辑可能会有所不同。

  

Docker如何管理容器内DNS配置的确切细节可以从一个Docker版本更改为下一个版本。因此,您不应该假设/ etc / hosts,/ etc / resolv.conf等文件在容器内部进行管理并保留文件并使用以下Docker选项。

默认桥接网络的设计似乎与用户定义的桥接网络的设计不同:

  

为了保持向后兼容性,默认桥接网络中的DNS配置将保留,不会发生任何行为更改。有关默认网桥中DNS配置的详细信息,请参阅默认网桥中的DNS。

我希望我能为这个问题提供详细的技术根本原因,并希望有人可以填写这个答案的空白。在此期间,请使用上面记录的解决方法。