正如标题所示,我需要能够检索docker托管的IP地址以及从主机到容器的portmap,并在容器内部完成这些工作。
当前回答
在Ubuntu上,hostname命令可以与以下选项一起使用:
-i,——ip-address主机名地址 -I,——all-ip-addresses主机的所有地址
例如:
$ hostname -i
172.17.0.2
要给变量赋值,可以使用以下一行代码:
IP=$(hostname -i)
其他回答
——add-host可能是一个更简洁的解决方案(但没有端口部分,只能使用该解决方案处理主机)。所以,在你的docker运行命令中,做如下的事情:
docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print $3}'` [my container]
(来自https://stackoverflow.com/a/26864854/127400)
/sbin/ip route|awk '/default/ { print $3 }'
正如@MichaelNeale注意到的,在Dockerfile中使用这个方法是没有意义的(除非我们只在构建时需要这个IP),因为这个IP在构建时是硬编码的。
与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
下面是在AWS中运行Docker的另一个选择。这个选项避免了使用apk来添加curl包,节省了宝贵的7mb空间。使用内置的wget (BusyBox二进制文件的一部分):
wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4
唯一的方法是在创建容器时将主机信息作为环境传递
run --env <key>=<value>
推荐文章
- 如何从DockerFile运行docker实例?
- 我是否试图连接到启用TLS的没有TLS的守护进程?
- Docker -一种访问主机USB或串行设备的方法?
- Docker:无效引用格式
- 将AWS凭证传递给Docker容器的最佳方法是什么?
- 如何在docker-compose中设置主机名?
- 为什么Docker容器映像这么大?
- 如何在docker撰写版本3中指定内存和CPU限制
- Docker和安全密码
- 如何让Docker容器在系统引导时自动启动?
- 如何在Docker容器中用模式初始化MySQL数据库?
- PYTHONUNBUFFERED在docker文件中的用途是什么?
- 如何在Dockerfile CMD中使用变量?
- 将主机端口转发到docker容器
- “docker compose”与“docker-compose”的区别