docker - 在 Kubernetes pod 中为 docker-in-docker 容器使用 hosts 文件

标签 docker jenkins kubernetes

我想要的是:

在 Jenkins master 创建的 kubernetes pod 中动态添加主机,并允许 pod 中挂载的 docker 使用这些主机。

我正在使用 Jenkins 为 docker build 创建动态从站,并为 docker build 和 docker push 创建了 docker-in-docker slave 容器。 docker-in-docker 是通过将 VM 的 docker.sock 挂载到容器来创建的:

volumeMounts:
- name: hostpathvolume
  mountPath: '/var/run/docker.sock'

我正在使用 kubernetes 的 hostAliases 将主机文件附加到一些私有(private) docker 注册表中:
hostAliases:
- ip: 9.110.73.11
  hostnames:
  - devopsprod.icp
- ip: 9.119.42.60
  hostnames:
  - devops.icp

我已经确认创建的 pod 在/etc/hosts 中有这些主机,但是当我运行时:
docker login -u xxx -p xxx devops.icp:8500

我收到一个 DNS 错误:
Error response from daemon: Get https://devops.icp:8500/v2/: dial tcp: lookup devops.icp on 0.0.0.0:00: no such host

这意味着我在容器中运行的 docker 没有使用 pod 中的/etc/hosts 来查找 IP 地址。有没有办法解决这个问题?我不想在 VM 的/etc/hosts 文件中手动添加主机。

最佳答案

您已安装 docker.sock进入 Pod,但 Docker 仍然使用来自 Node 的配置,而不是来自 Pod。没有其他选项,需要给/etc/hosts添加别名在每个节点上使其工作。

关于docker - 在 Kubernetes pod 中为 docker-in-docker 容器使用 hosts 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52716010/

相关文章:

docker - GO - Docker 在 K8S 容器上询问证书

docker - 使用 Docker Engine API 部署新堆栈

java - 通过 JENKINS 进行构建时出现错误 "com.ibm.etools.ejbdeploy.batch_extension"无法在注册表中找到

jenkins - 如何 Helm 设置对象数组( map 数组)?

java - Maven 3 尚未实现构建单个 Maven 模块

docker - 如何将私有(private)注册表证书添加到 Docker 机器

python - docker:无法将两个容器端口映射到一个主机端口

Docker for Desktop Kubernetes 无法连接到服务器:拨号 tcp [::1]:6445

kubernetes - 如何将 nodeSelector 添加到 Deployment yaml 文件?

elasticsearch - 在K8s上运行ElasticSearch和Kibana错误-Kibana无法正确加载。检查服务器输出以获取更多信息