Skip to content

Commit

Permalink
DOCKER-694: Want --add-hosts support for 'docker run'
Browse files Browse the repository at this point in the history
  • Loading branch information
trentm committed Apr 1, 2016
1 parent 2cc1c9e commit b9c3780
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/backends/sdc/containers.js
Expand Up @@ -1654,6 +1654,11 @@ function buildVmPayload(opts, container, callback) {
= JSON.stringify(container.HostConfig.DnsSearch);
}

if (container.HostConfig.ExtraHosts) {
payload.internal_metadata['docker:extraHosts']
= JSON.stringify(container.HostConfig.ExtraHosts);
}

payload.autoboot = false; // because docker does create & start separately
payload.docker = true;
payload.restart_init = false;
Expand Down
12 changes: 12 additions & 0 deletions lib/backends/sdc/utils.js
Expand Up @@ -619,6 +619,18 @@ function vmobjToInspect(opts, obj, vmData, callback) {
}
}

if (obj.internal_metadata && obj.internal_metadata['docker:extraHosts']) {
try {
container.HostConfig.ExtraHosts
= JSON.parse(obj.internal_metadata['docker:extraHosts']);
} catch (e) {
log.warn({err: e,
containerId: container.Id,
extraHosts: obj.internal_metadata['docker:extraHosts']},
'Failed to parse docker:extraHosts');
}
}

if (obj.internal_metadata
&& obj.internal_metadata['docker:restartpolicy']) {

Expand Down
2 changes: 2 additions & 0 deletions lib/validate.js
Expand Up @@ -384,6 +384,8 @@ function validateCreateContainer(req, res, next) {
assertOptionalArrayOfString(container.Env, 'Env');
assertOptionalArrayOfString(container.Entrypoint, 'Entrypoint');

assertOptionalArrayOfString(container.HostConfig.ExtraHosts,
'HostConfig.Entrypoint');
assertOptionalBool(container.HostConfig.PublishAllPorts,
'HostConfig.PublishAllPorts');
assertOptionalObject(container.HostConfig.PortBindings,
Expand Down
87 changes: 87 additions & 0 deletions test/integration/cli-run-add-host.test.js
@@ -0,0 +1,87 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

/*
* Copyright 2016, Joyent, Inc.
*/

/*
* Integration tests for 'docker run --add-host ...' (aka "ExtraHosts").
*/

var format = require('util').format;
var libuuid = require('libuuid');
var test = require('tape');
var vasync = require('vasync');

var cli = require('../lib/cli');
var vm = require('../lib/vm');


// --- Globals

var CONTAINER_PREFIX = 'sdcdockertest_runaddhost_';


// --- Tests

test('setup', function (tt) {
tt.test(' test CLI init', cli.init);
tt.test(' vmapi client init', vm.init);
});


test('docker run --add-host foo:1.2.3.4', function (tt) {
var containerId;

var containerName = CONTAINER_PREFIX + libuuid.create().split('-')[0];
tt.ok(containerName, 'containerName: ' + containerName);

tt.test(' docker run --add-host foo:1.2.3.4 ...', function (t) {
var args = format(
'--add-host foo:1.2.3.4 -d --name %s alpine sleep 3600',
containerName);
cli.run(t, {args: args}, function (err, id) {
t.ifErr(err, 'docker run --add-host foo:1.2.3.4 ...');
containerId = id;
t.end();
});
});

tt.test(' check VM.internal_metadata["docker:extraHosts"]', function (t) {
vm.get(t, {
id: containerId,
partialExp: {
internal_metadata: {
'docker:extraHosts': '["foo:1.2.3.4"]'
}
}
});
});

tt.test(' check that /etc/hosts has the "foo" entry', function (t) {
var cmd = 'exec ' + containerName + ' grep foo /etc/hosts';
cli.docker(cmd, function (err, stdout, stderr) {
t.ifErr(err, 'docker CONTAINER grep foo /etc/hosts');
t.equal(stdout, 'foo\t1.2.3.4\n');
t.end();
});
});

tt.test(' check that ExtraHosts is set in inspect output', function (t) {
cli.inspect(t, {
id: containerId,
partialExp: {
HostConfig: {
ExtraHosts: ['foo:1.2.3.4']
}
}
});
});
});


test('teardown', cli.rmAllCreated);

0 comments on commit b9c3780

Please sign in to comment.