navy
Version:
Quick and powerful development environments using Docker and Docker Compose
56 lines (44 loc) • 1.46 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.dnsLookup = dnsLookup;
exports.getExternalIP = getExternalIP;
var _dns = _interopRequireDefault(require("dns"));
const IPV4_FAMILY = 4;
async function dnsLookup(hostname) {
return await new Promise((resolve, reject) => {
_dns.default.lookup(hostname, null, (err, ip, ipFamily) => {
if (err || ipFamily !== IPV4_FAMILY) {
reject(new Error('Failed to lookup hostname "' + hostname + '"'));
} else {
resolve(ip);
}
});
});
}
async function getExternalIP(ipInConfig) {
const dockerHost = process.env.DOCKER_HOST; // DEPRECATED use NAVY_EXTERNAL_IP instead
if (process.env.NAVY_HOST) {
return process.env.NAVY_HOST;
}
if (process.env.NAVY_EXTERNAL_IP) {
// Custom external IP
return process.env.NAVY_EXTERNAL_IP;
}
if (ipInConfig) {
return await dnsLookup(ipInConfig);
}
if (dockerHost && dockerHost.indexOf('tcp://') !== -1) {
// OSX with docker-machine, or a remote docker
// dockerHost will be formatted like:
// tcp://_._._._:_
// We only care about the IP address
let ip = dockerHost.substring('tcp://'.length);
ip = ip.substring(0, ip.lastIndexOf(':')).trim();
ip = await dnsLookup(ip);
return ip;
} // No custom docker host, assume localhost
return '127.0.0.1';
}