diff --git a/src/docker.js b/src/docker.js index 5e2afd89d..cd6b5ee43 100644 --- a/src/docker.js +++ b/src/docker.js @@ -235,7 +235,9 @@ async function getMounts(app) { return volumeMounts.concat(addonMounts); } -function getAddresses() { +// This only returns ipv4 addresses +// We dont bind to ipv6 interfaces, public prefix changes and container restarts wont work +function getAddressesForPort53() { const deviceLinks = safe.fs.readdirSync('/sys/class/net'); // https://man7.org/linux/man-pages/man5/sysfs.5.html if (!deviceLinks) return []; @@ -249,11 +251,6 @@ function getAddresses() { const address = safe.query(r, 'addr_info[0].local'); if (address) addresses.push(address); } - const inet6 = safe.JSON.parse(safe.child_process.execSync(`ip -f inet6 -j addr show dev ${phy.name} scope global`, { encoding: 'utf8' })); - for (const r of inet6) { - const address = safe.query(r, 'addr_info[0].local'); - if (address) addresses.push(address); - } } return addresses; @@ -298,7 +295,7 @@ async function createSubcontainer(app, name, cmd, options) { exposedPorts[`${containerPort}/${portType}`] = {}; portEnv.push(`${portName}=${hostPort}`); - const hostIps = hostPort === 53 ? getAddresses() : [ '0.0.0.0', '::0' ]; // port 53 is special because it is possibly taken by systemd-resolved + const hostIps = hostPort === 53 ? getAddressesForPort53() : [ '0.0.0.0', '::0' ]; // port 53 is special because it is possibly taken by systemd-resolved dockerPortBindings[`${containerPort}/${portType}`] = hostIps.map(hip => { return { HostIp: hip, HostPort: hostPort + '' }; }); }