在Dockerfile中获取主机IP

时间:2018-02-22 06:20:12

标签: docker dockerfile

我的Dockerfile中有一行:

&& echo "xdebug.remote_host=192.168.0.216" >> /usr/local/etc/php/conf.d/xdebug.ini`

我想让IP动态化。我如何获得主机IP?

2 个答案:

答案 0 :(得分:2)

您需要使用build-time variables(-build-arg)。

此标志允许您传递在Dockerfile的RUN指令中像常规环境变量一样访问的构建时变量。

因此,Dockerfile被修改为:

ARG IP_ADDRESS
RUN ... && echo "xdebug.remote_host=$IP_ADDRESS" >> /usr/local/etc/php/conf.d/xdebug.ini`

您只需在构建图像时定义构建时变量IP_ADDRESS

$ docker build --build-arg IP_ADDRESS=<IP_ADDRESS> .

如果您使用docker-compose

1。使用以下内容创建文件.env

IP_ADDRESS="<IP_ADDRESS>"

你可以每次都这样(例如Linux机器):

IP_ADDRESS=$(ip a | grep <interface> | grep inet | awk '{print $2}' | awk -F'/' '{print $1}')
echo "IP_ADDRESS=$IP_ADDRESS" > .env

2。使用以下docker-compose.yaml构建您的图片:

version: '3'
services:
  myservice:
    build:
      context: .
      args:
        IP_ADDRESS: ${IP_ADDRESS} 

3. 建立上图:

docker-compose build

答案 1 :(得分:2)

没有简单的内置方式来获取Docker主机IP(除非您使用的是Docker for Mac)

入口点

最好不要在构建时设置Docker主机IP,否则图像将与其构建的主机绑定,并且在其他任何地方都无法工作。

ENTRYPOINT可用于根据环境变量进行配置设置,然后将所有命令传递给容器:

#!/bin/sh
if [ -n "$IP_ADDRESS" ]; then
  echo "xdebug.remote_host=$IP_ADDRESS" >> /usr/local/etc/php/conf.d/xdebug.ini
else
  echo "No environment variable IP_ADDRESS set for xdebug"
fi
exec "$@"

然后运行:

docker run -e IP_ADDRESS=192.168.51.5 me/app-debug

适用于Mac的Docker

在Docker for Mac 17.12+上,您可以使用主机名docker.for.mac.host.internal

Xdebug的

另一种选择是为xdebug设置xdebug.remote_connect_back = 1 so you don't need a specific remote_host

构建

Nicolay的answer covers the build time setup

相关问题