【问题标题】:docker run -it gcr.io/... /bin/bash does not get SkyDNS settings in /etc/resolv.confdocker run -it gcr.io/... /bin/bash 没有在 /etc/resolv.conf 中获取 SkyDNS 设置
【发布时间】:2015-09-12 19:59:41
【问题描述】:

从 GKE 节点上正在运行的 pod 我可以:

# docker exec e68f1765f8b0 more /etc/resolv.conf 
::::::::::::::
/etc/resolv.conf
::::::::::::::
nameserver 10.103.240.10
nameserver 169.254.169.254
nameserver 10.10.0.1
search default.svc.cluster.local svc.cluster.local cluster.local c.dandsltd-gce.internal. 899692696219.google.internal. google.internal.
options ndots:5

但是如果我从同一个 GKE 节点运行:

# docker run  -it gcr.io/<same image> /bin/bash
root@ac81b13b172d:/# more /etc/resolv.conf 
domain c.dandsltd-gce.internal.
search c.dandsltd-gce.internal. 899692696219.google.internal. google.internal.
nameserver 169.254.169.254
nameserver 10.10.0.1

这让我陷入了一个循环,因为我认为 SkyDNS 没有在我的容器上运行。显然,从复制控制器启动一个 pod/container 会做更多的事情,比如注入 SkyDNS 设置而不是仅仅运行一个 docker run。

有没有办法运行一个单独的 docker 容器并获得与通过复制控制器启动的容器相同的环境?

谢谢, 亚伦

【问题讨论】:

    标签: google-kubernetes-engine


    【解决方案1】:

    您可以通过在规范中使用 restartPolicy: Never 创建一个 pod 来运行一次性容器。例子: apiVersion: v1 kind: Pod metadata: name: nginx labels: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 restartPolicy: "Never"

    在 v1.1 中,kubectl 将支持通过 kubectl run $podname --image=$image --restart=Never 从图像创建一次性 pod。同时,您必须从文件中创建一个 pod 以指定重启策略。

    【讨论】:

      【解决方案2】:

      我真正需要做的是:

      # docker exec e68f1765f8b0 bash
      

      从 GKE 节点开始。然后我可以从集群中运行的容器获取 shell,而不是只在本地运行但不是由 kubernetes 配置的新容器。

      这样,SkyDNS 之类的东西就为您设置好了,您可以测试类似的东西 wget .default.cluster.local 等等

      【讨论】:

        猜你喜欢
        • 2021-11-08
        • 2017-04-23
        • 2023-02-08
        • 1970-01-01
        • 2016-10-23
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多