docker - 在 kubernetes 内运行的 docker 容器内没有互联网连接,使用 weave 作为网络

标签 docker jenkins kubernetes jenkins-plugins weave

我有一个在 AWS EC2 实例上运行并编织为网络(cni)的 kubernetes 集群。我已经禁用了 docker 网络(ipmask 和 iptables),因为它是由 weave 管理的(以避免网络冲突)。

我已经在这个集群上部署了我的 Jenkins 作为 K8s pod,这个 jenkins 使用 jenkins kubernetes 插件基于我定义的 pod 和容器模板生成动态从属。这些 slaves 容器中有 docker 客户端,它通过 docker.sock 连接到主机 docker 引擎

因此,当我在 Jenkins 中运行任何作业时,它会启动一个从属设备,并在此克隆一个 git 存储库并开始构建存储库中存在的 Dockerfile。

我的示例 dockerfile 如下所示:

FROM abc:123
RUN yum update

因此,当容器开始构建它时,它会尝试连接到 redhat 存储库以更新本地存储库并在此处失败。为了调试,我登录到这个容器并尝试 wget/CURL 一些包,发现这个容器中没有互联网连接。

我怀疑在构建 docker 时会启动中间容器,而这些容器不是由 weave 管理的,因此它们没有互联网连接。

需要建议。

相关问题:Internet connection inside Docker container in Kubernetes

最佳答案

好吧,经过一番努力,我终于找到了解决方案。
所以当 K8s 启动一个 pod 时,它会启动一个 sidecart 容器,它的作用基本上是为 pod 容器提供网络。
因此,在运行 docker build 时,如果我将它的容器 ID 作为网络传递,那么我的中间上下文开始通过此容器获得 Internet 连接。

所以变化看起来像这样:

docker build -t "some name" --network container:\$(docker ps | grep \$(hostname) | grep k8s_POD | cut -d\" \" -f1) -f infra/docker/Dockerfile .

希望这可以帮助。 :D

关于docker - 在 kubernetes 内运行的 docker 容器内没有互联网连接,使用 weave 作为网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49299428/

相关文章:

jenkins - 如何为每个(新)Jenkins 作业创建默认配置?

kubernetes - 如何在应用程序部署中覆盖istio-proxy选项?

docker - 了解不同平台上的Docker

docker - 带有 docker/build-push-action 和 GitHub Actions 的生产环境文件

Jenkins Pipeline - 从构建参数设置 process.env 变量

android - 如何通过Gradle任务设置Jenkins构建状态?

kubernetes - 如何同时更新多个部署,全部成功才部署?

ruby-on-rails - kubernetes设置根环境变量

docker - 如何将日志从 jwilder/nginx-proxy docker 镜像发送到 logstash?

reactjs - 在ReactJS/NextJS/ApolloClient Web应用程序中查找内存泄漏