正如标题所述,我需要能够在容器内部检索Docker主机的IP地址和主机到容器的端口映射。
正如标题所述,我需要能够在容器内部检索Docker主机的IP地址和主机到容器的端口映射。
const cp = require('child_process');
const ec2 = function (callback) {
const URL = 'http://169.254.169.254/latest/meta-data/local-ipv4';
// we make it silent and timeout to 1 sec
const args = [URL, '-s', '--max-time', '1'];
const opts = {};
cp.execFile('curl', args, opts, (error, stdout) => {
if (error) return callback(new Error('ec2 ip error'));
else return callback(null, stdout);
})
.on('error', (error) => callback(new Error('ec2 ip error')));
}//ec2
和被用作
ec2(function(err, ip) {
if(err) console.log(err)
else console.log(ip);
})
curl http://rancher-metadata/latest/self/host/agent_ip
。更多详细信息请参见:https://rancher.com/docs/rancher/v1.6/en/rancher-services/metadata-service/。hostname
命令并带有以下选项:
-i
,--ip-address
主机名的地址-I
,--all-ip-addresses
主机的所有地址$ hostname -i
172.17.0.2
可以使用以下一行代码将值分配给变量:
IP=$(hostname -i)
如果您正在Service Fabric集群上运行Windows容器,则可以通过环境变量Fabric_NodeIPOrFQDN
获取主机的IP地址。Service Fabric环境变量
也许我创建的容器也很有用 https://github.com/qoomon/docker-host
您可以使用容器名称DNS来访问主机系统,例如curl http://dockerhost:9200,因此无需烦恼任何IP地址。
# docker run -d -p <external server port>:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
2) 启动 ipify 容器
# docker run -e VIRTUAL_HOST=<external server name/address> --detach --name ipify osixia/ipify-api:0.1.0
。
# curl http://<external server name/address>:<external server port>
通过 http header "X-Forwarded-For",ipify 返回 Docker 主机的 IP 地址
示例(ipify 服务器名为 "ipify.example.com",运行在端口 80 上,Docker 主机的 IP 是 10.20.30.40):
# docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
# docker run -e VIRTUAL_HOST=ipify.example.com --detach --name ipify osixia/ipify-api:0.1.0
现在你可以在容器内调用:
# curl http://ipify.example.com
10.20.30.40
traceroute
,对我来说在Linux主机上运行良好,例如在基于Alpine的容器中:traceroute -n 8.8.8.8 -m 4 -w 1 | awk '$1~/\d/&&$2!~/^172\./{print$2}' | head -1
它需要一点时间,但会列出第一个不以172.开头的IP跳点。如果没有成功响应,请尝试使用-m 4
参数增加测试跳数上限。
使用 https://docs.docker.com/machine/install-machine/
a) $ docker-machine ip
b) 获取一个或多个机器的 IP 地址。
$ docker-machine ip host_name
$ docker-machine ip host_name1 host_name2