From a0bc0851d6ad19b9fcad7f59022e8368eb0cbaf1 Mon Sep 17 00:00:00 2001 From: Peng Tao Date: Sun, 17 Apr 2016 17:26:22 +0800 Subject: [PATCH] recreate /etc/resolv.conf iif specified in pod spec hyperd would inject a default DNS server if user did not specify it in pod spec. If we recreate resolv.conf here, the injected file will be lost. Signed-off-by: Peng Tao --- src/container.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/container.c b/src/container.c index 21c3c2a..9880ca8 100644 --- a/src/container.c +++ b/src/container.c @@ -238,14 +238,15 @@ static int container_recreate_symlink(char *oldpath, char *newpath) * which we have over ridden in container_setup_mount, so no need to create * them here. */ -static int container_setup_init_layer(struct hyper_container *container) +static int container_setup_init_layer(struct hyper_container *container, + int setup_dns) { if (!container->initialize) return 0; hyper_mkdir("./etc/"); - if (container_recreate_file("./etc/resolv.conf") < 0) + if (setup_dns && container_recreate_file("./etc/resolv.conf") < 0) return -1; if (container_recreate_file("./etc/hosts") < 0) @@ -410,6 +411,7 @@ static int hyper_container_init(void *data) struct hyper_container_arg *arg = data; struct hyper_container *container = arg->c; char root[512], rootfs[512]; + int setup_dns; fprintf(stdout, "%s in\n", __func__); if (container->exec.argv == NULL) { @@ -498,7 +500,12 @@ static int hyper_container_init(void *data) } chdir(rootfs); - if (container_setup_init_layer(container) < 0) { + /* + * Recreate dns resolver iif configured by pod spec. Other cases + * are handled by hyperd instead. + */ + setup_dns = arg->pod->dns != NULL && arg->pod->d_num > 0; + if (container_setup_init_layer(container, setup_dns) < 0) { fprintf(stderr, "container sets up init layer failed\n"); goto fail; }