docker 运行 -it gcr.io/... /bin/bash 没有在 /etc/resolv.conf 中获取 SkyDNS 设置

docker run -it gcr.io/... /bin/bash does not get SkyDNS settings in /etc/resolv.conf

从 GKE 节点上的 运行ning 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 运行。

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

谢谢, 亚伦

您可以 运行 通过在规范中创建带有 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 从图像创建一次性 pods。同时,您必须从文件创建 pod 以指定重启策略。

我真正需要做的是:

# docker exec e68f1765f8b0 bash

来自 GKE 节点。然后我可以从集群中的容器 运行 中获取 shell 而不是仅在本地 运行 而不是由 kubernetes 提供的新容器。

这样,像 SkyDNS 这样的东西就为你设置好了,你可以测试像 wget .default.cluster.local 等等